当我从文件中读取时打印未预期的结果

时间:2013-12-12 05:03:10

标签: c gcc

我写了一个代码来读取文件“out”中的整数。

 #include  <stdio.h>                                               
  int  main()                                                            
   {                                                                 
       FILE  *f1;                                          
       int   number, i=0,a[10];                                              


       f1 = fopen("out", "r");      

       while(!feof(f1)){ //f1 is your pointer to the file opened with fopen()
    fscanf(f1,"%d",&a[i]); //a is  array
    i++;
printf("%d",a[i]);
}
return 0;                                                 

   } 

out文件只有四个值,如

1

3

4

5

但是当我运行程序时它会像这样给出

13134518624-10740437841345139779220584

我的代码中有问题吗?

3 个答案:

答案 0 :(得分:4)

您不打印更多项目,而是打印较大的未初始化值。交换增量和打印语句:

i++;
printf("%d",a[i]);

为:

printf("%d",a[i]);
i++;

但您还需要检查fscanf函数的返回值,该函数返回成功读取/提取的项的值:

if (fscanf(f1,"%d",&a[i]) == 1) {
            printf("%d\n",a[i]);
            i++;
}

这是因为只有失败的读取尝试才会设置eof标志,并且在尝试失败后以及打印伪造输出后检查eof。

答案 1 :(得分:1)

fscanf(f1,"%d",&a[i]); //a is  array
    i++;
printf("%d",a[i]);

您阅读了[i]并打印了[i + 1]

答案 2 :(得分:0)

while(!feof(f1))
{
   fscanf(f1,"%d",&a[i]);
   printf("%d",a[i++]);
}