C 从文件读取时打印非预期结果
我写了一个代码从文件“out”中读取整数 但当我运行这个程序时,它会给出这样的结果C 从文件读取时打印非预期结果,c,gcc,C,Gcc,我写了一个代码从文件“out”中读取整数 但当我运行这个程序时,它会给出这样的结果 13134518624-10740437841345139779220584 我的代码哪里有问题?您不是在打印更多的项目,而是在打印更大的未初始化值。从以下位置交换增量和打印语句: i++; printf("%d",a[i]); 致: 但您还需要检查fscanf函数的返回值,该函数返回成功读取/提取项目的值: if (fscanf(f1,"%d",&a[i]) == 1) {
13134518624-10740437841345139779220584
我的代码哪里有问题?您不是在打印更多的项目,而是在打印更大的未初始化值。从以下位置交换增量和打印语句:
i++;
printf("%d",a[i]);
致:
但您还需要检查fscanf
函数的返回值,该函数返回成功读取/提取项目的值:
if (fscanf(f1,"%d",&a[i]) == 1) {
printf("%d\n",a[i]);
i++;
}
这是因为只有失败的读取尝试才会设置eof标志,并且在尝试失败后以及打印虚假输出后,您正在检查eof。您不是打印更多的项目,而是打印更大的未初始化值。从以下位置交换增量和打印语句:
i++;
printf("%d",a[i]);
fscanf(f1,"%d",&a[i]); //a is array
i++;
printf("%d",a[i]);
致:
但您还需要检查fscanf
函数的返回值,该函数返回成功读取/提取项目的值:
if (fscanf(f1,"%d",&a[i]) == 1) {
printf("%d\n",a[i]);
i++;
}
这是因为只有失败的读取尝试才会设置eof标志,并且在尝试失败后以及打印虚假输出后,您正在检查eof
fscanf(f1,"%d",&a[i]); //a is array
i++;
printf("%d",a[i]);
你读了一个[i]并打印了一个[i+1]
while(!feof(f1))
{
fscanf(f1,"%d",&a[i]);
printf("%d",a[i++]);
}
你读了一个[i]并打印了一个[i+1]你确定
fopen
成功了吗?@Joe Z是的,没有问题fopen@perreal在下面找到您的主要错误。第二个错误是未检查fscanf
是否成功进行了转换。最后一行可能要打印两次。你确定fopen
成功了吗?@Joe Z是的,没有问题fopen@perreal在下面找到您的主要错误。第二个错误是未检查fscanf
是否成功进行了转换。最后一行可能打印两次。
while(!feof(f1))
{
fscanf(f1,"%d",&a[i]);
printf("%d",a[i++]);
}