2011-06-21 26 views
1

我在更改行fwrite(tmp_array, sizeof(int), num, f);fprintf时遇到问题。fwrite => 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); 
} 
+1

需要更多信息,有什么问题吗? – User1578

+0

您希望fprintf提供什么样的格式输出? – Twotymz

+0

你能告诉我们你试过了什么吗? – GrahamS

回答

3

fprintf中会写在你的整数数组为文本,如果这就是你想要的东西,这样做

int i; 
for(i = 0; i < num; i++) 
    fprintf(f,"%d ",tmp_array[i]); 
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]); 
0

你将不得不用来替换的fwrite(...)

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

但你为什么要这么做?

0

你想写一个文本文件,而不是一个二进制文件?你将需要使用一个循环,这样的事情:

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

下面的for循环应该通过遍历tmp_array每个值打印到f解决您的问题。尝试使用,

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