如何正确读取文件并将其打印在数组中?

时间:2015-11-16 19:24:05

标签: c file

我想知道为什么它继续打印1号,即使我的文件中没有1号

The input file is: file.in
2
4 
0 0 0 0

FILE *fp;
fp = fopen("file.in","r");

if(fp != NULL)
{
    fscanf(fp, "%d\n", &noOfPuzzles);
    fscanf(fp, "%d\n", &dimensionOfBoard);
    int position[dimensionOfBoard];
    int value[dimensionOfBoard];
    for(i = 0 ; i< dimensionOfBoard; i++)
     {
            position[i] = fscanf(fp, "%d ", &value[i]);
     } 
}

printf("No. of Puzzles: %d\n",noOfPuzzles);
printf("Dimension of Board: %d\n",dimensionOfBoard);
for(i = 0 ; i< dimensionOfBoard; i++)
     {
             printf("%d ",position[i]);
     } 



 The output is always like this:
 No. of Puzzles: 2
 Dimension of Board: 4
 1 1 1 1

为什么它会继续打印数字&#39; 1&#39;?谢谢

4 个答案:

答案 0 :(得分:2)

您正在做的是捕获fscanf()的返回值:

        position[i] = fscanf(fp, "%d ", &value[i]);

你将1存放在位置[i],因为fscanf()返回1表示它填充了1个值 - 你正在读取值[i]的实际值,然后输出位置[i]中的值

        fscanf(fp, "%d", &position[i]);

将工作,在最后一个循环中输出value []数组的值。

答案 1 :(得分:0)

您要将fscanf()的返回值分配给position[i],它会返回成功填充的值的数量,如果发生错误,则返回-1。

相反,您需要使用values[i]数组来打印从文件中读取的零。

答案 2 :(得分:0)

您对fscanf的使用不正确。 fscanf会返回成功扫描的项目数,即您的案例中的1项,从而为1的每个成员分配position。我不知道value数组的用途是什么,但你可以像这样直接扫描position

fscanf(fp, "%d ", &position[i]);

答案 3 :(得分:0)

您正在打印位置[i],您已将其设置为fscanf的返回值。在这种情况下,Fscanf将读取值放入其第二个参数中,并返回读取的字符数。您需要打印出值[i]。