fwrite => fprintf中

时间:2011-06-21 13:51:41

标签: c

我无法将行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 个答案:

答案 0 :(得分:3)

fprintf会将您的整数数组写为文本,如果这是您想要的,请执行类似

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

答案 1 :(得分:1)

以下for循环可以通过遍历tmp_array并将每个值打印到f来解决您的问题。尝试使用,

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

答案 2 :(得分:0)

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]);

答案 3 :(得分:0)

您必须用

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

但你为什么要这样做?

答案 4 :(得分:0)

您是在尝试编写文本文件而不是二进制文件吗?你将需要使用一个循环,如下所示:

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