在C中作为文件中的字符出现的整数

时间:2013-04-09 12:40:45

标签: c

这是我的代码的一部分,它应该创建一个包含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);

3 个答案:

答案 0 :(得分:1)

如果你使用fwrite并用它写二进制数据,你不能指望文件中的文本。使用fprintf代替或代替(C ++)。

答案 1 :(得分: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码输出到stdout。

答案 2 :(得分:0)

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

如果要输出数组的元素,则循环中需要fprintf(fp, "%d", nums[i]);之类的内容。