0

这是我的一段代码,它应该创建一个由 10 个随机整数组成的数组,将它们打印到文件中,然后将它们按顺序排列并将有序数组附加到文件中,

如何停止在文件中显示为 ascii 字符的整数?

size=10;
int nums1[size];
for(i=0;i<size;i++)
{
    nums1[i]=rand();
}

FILE *fp;
if((fp=fopen("ARRAY_1", "w"))==NULL) {
    printf("Cannot open file.\n");
}
if(fwrite(nums1, sizeof(int), size, fp) != size) {
    printf("File read error.");
}
fclose(fp);

bubblesort(nums1,size);

if((fp=fopen("ARRAY_1", "a"))==NULL) {
    printf("Cannot open file.\n");
}
if(fwrite(nums1, sizeof(int), size, fp) != size) { 
    printf("File read error.");
}
fclose(fp);
4

3 回答 3

1

fwrite只会调用fputc哪个输出指定字节到指定文件。当您在文本编辑器中打开此文件时,它将将该数据解释为 ASCII 代码。您可以使用od(适用于 Linux)或Debug(适用于 Windows)之类的命令来检查文件的实际内容,以显示该文件中数据的各种表示形式。

如果您希望实际整数在文本编辑器中显示为字符,请使用fprintf

int i;
for(i = 0; i < size; i++) {
    if(fprintf(fp, "%d ", nums1[i]) < 0) {
        /* An error occurred */
    }
}

fprintf将像您预期的那样工作,因为它将参数(即nums1[i])转换为指定为第二个参数的格式。

例如,考虑

fprintf(stdout, "%d", 1);

在这里,fprintf将取数字 1 并将其转换为等效的 ASCII 码(ASCII 码是十进制的 49)并将该 ASCII 码输出到标准输出。

于 2013-04-09T12:58:21.453 回答
1

如果您使用 fwrite 并用它写入二进制数据,则不能期望文件中有文本。使用 fprintf 或 ofstream (C++)。

于 2013-04-09T12:43:29.377 回答
0

您只是将数组作为二进制数据块写入文件。

如果你想输出数组的元素,你需要像fprintf(fp, "%d", nums[i]);循环一样的东西。

于 2013-04-09T12:45:11.840 回答