Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中以字符形式出现在文件中的整数_C - Fatal编程技术网

在C中以字符形式出现在文件中的整数

在C中以字符形式出现在文件中的整数,c,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"); } i

这是我的一段代码,它应该创建一个由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);
size=10;
int nums1[大小];

对于(i=0;i如果使用fwrite并将二进制数据写入文件,则不能期望文件中有文本。请使用fprintf或ofstream(C++)。

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


如果要输出数组的元素,则需要类似于
fprintf(fp,“%d”,nums[i])在循环中。

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

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

int i;
for(i = 0; i < size; i++) {
    if(fprintf(fp, "%d ", nums1[i]) < 0) {
        /* An error occurred */
    }
}
inti;
对于(i=0;i
fprintf
将像您预期的那样工作,因为它将参数(即
nums1[i]
)转换为指定为第二个参数的格式

例如,考虑

fprintf(标准输出,“%d”,1);


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

你的意思是要将它们转换为字符串吗?-1,我认为这与OP想要的正好相反,因为那样可以将数字保存为字符串。@如果一个新手说他们想要“将整数打印到文件中”,我会想到“放松”然后,他们希望将整数字符串化,而不是作为二进制转储。尽管如此,只有OP可以澄清……“然后它将其转换为可打印字符,并将其输出到指定文件。”不,
fputc
只写一个字节,不管它是否表示可打印字符。@DanielFischer,是的,绝对是这样。我的措辞错了。我现在编辑我的答案是为了更好地解释发生了什么。谢谢你指出这一点!是的,好多了。我认为这里根本没有必要提到
fputc
,我说
f写入
只将内存中的字节写入文件就足够了,但这并没有什么害处。@Danielfisher,是的,没错:)但我遇到过一些人声称写
能神奇地写入二进制数据。我只是想揭开这个函数的神秘面纱哈哈