Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 21:39   #1
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию запись в файл с новой строки

Доброго времени суток;
Не подскажите как правильно организовать запись в файл начиная с новой строки ..?
При обычном вводе в файл вместо столбца символов получилось нечто "^A &^E "
Пытался приклеить к массиву '\n', но не пологло=(
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  enum {a,b,c,t,h,u,n,s,l,k,q,w,e,z,x}bukaf[15];

int rand_char(){
  srand(time(NULL));
  int i =0,zna4enie;
  zna4enie=i+rand() %15 ;
  char bu= bukaf[zna4enie];
  return(bu);
}


int main(){
  int i,count;
  char key[]={1,9,7,8,0,5,5,5,0,0,0};                                                                                               
  FILE *fd;
  fd=fopen("name.txt","w");
  char cNewLine = '\n';
  size_t cou;
  for (count=1;count<300;count++) {
    FILE *fd;
    fd=fopen("./name","w");
    if(fd == NULL) {
      perror("ошибка открытия name");
      return EXIT_FAILURE;
    }
    printf("Открыл\n");
 for (i=7;i<=11;i++){
   char bu;
   rand_char();
   key[i]=bu;
   printf("+");
}
 char *last;
 last= strcat (key,cNewLine);//пытался склеить 
 // fprintf(fd, "%s%c",key , cNewLine);                                                                                                                
  fwrite(last, 1, strlen(last), fd);
 printf("Записано\n");
  }
  if (fclose(fd)==0) printf("cool");
}
при компиляции по-поводу склейки:
warning: passing argument 2 of ‘strcat’ makes pointer from integer without a cast
/usr/include/string.h:135:14: note: expected ‘const char * __restrict__’ but argument is of type ‘char’

PS: fprintf() \ fwrite() а в чем их разница ??
rowlin вне форума Ответить с цитированием
Старый 20.04.2011, 22:22   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну во первых strcat как аргументы принимает две строки, а вы char передаёте. Хуже того, этот char приводится к указателю, и к строке, таким образом, прикрепляется мусор.
Код:
fprintf(fd, "%s\n", key);
должно быть достаточно. Если хотите именно fwrite использовать, то можно либо:
Код:
fwrite(key, 1, strlen(key), fd);
fwrite(&cNewLine, 1, 1, fd);
Либо strcat'ом прикрепить строку "\n", либо самому записать символ так:
Код:
int length = strlen(key);
key[length] = '\n';
key[length + 1] = '\0';
но в последних двух случаях нужно прежде убедиться, что key достаточного размера для этого
netrino вне форума Ответить с цитированием
Старый 20.04.2011, 22:51   #3
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

ой ...извеняюсь тут косяк при copyPaste(в main 2 раза отрывается файл)

netrino Спасибо...
Но в файле получается:
Код:
^A      ^G^A
^A      ^G^A
^A      ^G^A
^A      ^G^A
^A      ^G^A
^A      ^G^A
^A      ^G^A
^A      ^G^A
...
Для прочтения файла обычным блакнотом что надо ?

Последний раз редактировалось rowlin; 20.04.2011 в 22:55.
rowlin вне форума Ответить с цитированием
Старый 21.04.2011, 00:23   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Только сейчас код посмотрел.. Кошмар. Что вы вообще пытаетесь сделать?
P.S. fwrite используют для записи непосредственных данных (структур и массивов), а fprintf для форматированной записи (строки, числа и т.д. представляются в виде читабельной для людей строки в файле).

P.P.S.
Пример использования fprintf для записи двух строк, каждая с новой строки:
Код:
#include <stdio.h>

int main() {
    FILE* out = fopen("file.txt", "w");

    fprintf(out, "%s\n", "First string");
    fprintf(out, "%s\n", "Second string");

    return fclose(out);
}
netrino вне форума Ответить с цитированием
Старый 21.04.2011, 18:31   #5
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

Код:
                                                                                                                                        
 * генерация ключа из 11 элементов, в котором первые 8 являются константами ,а последнии 3 char;                                                       
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum {a,b,c,t,h,u,n,s,l,k,q,w,e,z,x}bukaf[15];

char rand_char (){
  srand(time(NULL));
  int zna4enie;
  zna4enie=rand()%15 ;
  char bu= bukaf[zna4enie];
  return(bu);
}

int main(){
  int i,m;
  char key[]={'1','9','7','1','0','5','1','5','0','0','0','\0'};
  char last[11];
    FILE *fd;
    fd=fopen("./name","w");
    if(fd == NULL) {
      perror("ошибка открытия name");
      return EXIT_FAILURE;
    }
    printf("Открыл\n");
while (last!=key){  //условие генерации                                                                                                                
   for (i=7;i<=10;i++){
   char bu;
   rand_char();
   key[i]=bu;
 }
 fprintf(fd, "%s\n", key);
 for (m=0;m<=11;m++)/*присваиваем last*/
    last[m]=key[m];
 }
  printf("Happy end.");
 fclose(fd);
}
вот так - немного подправил , но все равно не понимаю где ошибка , компиляция успешно проходит ,но :
1) В выводе вместо вместо char (что введено а enum{} (3 последних в key) отображаются как ? );
2)Что-то с last не то ..
Надеюсь на вашу помощь...Заранее спасибо
rowlin вне форума Ответить с цитированием
Старый 21.04.2011, 18:58   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Могу лишь догадываться, как именно вам было нужно, быть может так?
Код:
#include <stdio.h>
#include <stdlib.h>

char rand_char() {
  static const char * const letters = "abcthunslkqwezx";
  int index = rand() % 15;
  return letters[index];
}

int main() {
  char key[] = "19710515000";
  FILE* fd = fopen("./name", "w");
  int i;

  if (fd == NULL) {
    perror("Ошибка открытия name");
    return EXIT_FAILURE;
  }

  printf("Открыл");

  srand(time(NULL));

  for (i = 7; i <= 10; i++)
    key[i] = rand_char();

  fprintf("%s\n", key);

  printf("Happy end.");
  fclose(fd);
  return 0;
}
Каково назначение last? Вы обратили внимание, что изначально оно забито мусором, а вы пытаетесь сравнить его (да ещё и неправильно) с key?
netrino вне форума Ответить с цитированием
Старый 22.04.2011, 00:30   #7
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

Спасибо за помощь !!

>>Могу лишь догадываться, как именно вам было нужно...

хотел разобраться :
1) никогда не пробывал использовать char для записи числ. значения (int);
2) ввод в файл (писал очень давно ..и то на Pascal);
3) использование random;

ps: готовое

Код:
                                                                                                                                                     
 /* генерация ключа из 11 элементов, в котором первые 8 являются константами ,а последнии 3 char;                                                       
 */
#include <stdio.h>
#include <stdlib.h>

char rand_char() {
  int r=0;
  static const char * const letters = "abcthunslkqwezx";
     int index =r+ rand() % 15;
  return letters[index];
}

int main() {
  char key[] = "19710515000";
  FILE* fd = fopen("./name", "w");
  int i,count=1;

  if (fd == NULL) {
    perror("Ошибка открытия name");
    return EXIT_FAILURE;
  }
  printf("Открыл");
  srand(time(NULL));
  while (count<15){  /*без использования ограничения вес фaйла составлял 746 Mb */
    for (i = 7; i <= 10; i++)
      key[i] = rand_char();
  fprintf(fd,"%s\n", key);
  count++;
}
  printf("Happy end.");
  fclose(fd);
  return 0;
}
Теперь можно браться за что-то серьезное..
rowlin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление новой строки staniiislav Microsoft Office Excel 6 21.04.2011 09:04
Запись хвоста ком. строки в файл Lazio Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.03.2011 21:18
Дбавление новой строки, после строки с подходящими параметрами RailOS Microsoft Office Excel 5 18.08.2010 10:12
Запись строки в файл SL1CK Общие вопросы Delphi 3 07.01.2010 16:20