fwrite => fprintf - PullRequest
       5

fwrite => fprintf

1 голос
/ 21 июня 2011

У меня проблемы с изменением строки fwrite(tmp_array, sizeof(int), num, f); на fprintf.

Может кто-нибудь взглянуть на меня?

 void generate_random_sorted_file(const char *file_name, int num)
 {
     FILE *f = fopen(file_name, "wb");
     if (f==NULL) 
     {
         printf("could not open %s\n", file_name);
         return;
     }

     int *tmp_array = calloc(num, sizeof(int));
     int i;

     for (i=0; i<num; i++)
     tmp_array[i]=rand();

     qsort (tmp_array, num, sizeof(int), compare); /* sorts the array */
     fwrite(tmp_array, sizeof(int), num, f);

     fclose(f);
 }

Ответы [ 5 ]

3 голосов
/ 21 июня 2011

fprintf запишет ваш целочисленный массив в виде текста, если вы этого хотите, сделайте что-то вроде

int i;
for(i = 0; i < num; i++)
  fprintf(f,"%d ",tmp_array[i]);
1 голос
/ 21 июня 2012

Следующий цикл for должен решить вашу проблему, пройдя tmp_array и напечатав каждое значение в f. Попробуйте использовать,

for (int i=0; i < num; i++) {
    fprintf(f, "%d\n", tmp_array[i]);
}
0 голосов
/ 21 июня 2011

Вы пытаетесь написать текстовый файл, а не двоичный файл? Вам нужно будет использовать цикл, что-то вроде этого:

for (int i=0; i<num; ++i)
    fprintf(f, "%d\n", tmp_array[i]);
0 голосов
/ 21 июня 2011

Вам придется заменить fwrite (...) на

for(i=0; i < num; i++)  
fprintf( f, "%d", tmp_array[i] );  

Но зачем тебе это делать?

0 голосов
/ 21 июня 2011
for (i=0; i<num; i++)
    fprintf(f, "%d ", tmp_array[i]);

Если вы хотите отформатировать его по-другому, вы можете сделать, но это голые кости.Например, добавление разрывов строки через каждые 10 элементов:

for (i=0; i<num; i++)
{
    fprintf(f, "%d ", tmp_array[i]);
    if ((i+1) % 10 == 0)
        fprintf(f, "\n");
}

Или, возможно, вам нужны разделители табуляции:

fprintf(f, "%d\t", tmp_array[i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...