fgetc()无法正常工作

时间:2012-06-07 12:06:27

标签: c multidimensional-array eof fgetc

我的文件类似于7 4 5 1等。我想把这些数字放在一个多维数组中。

for(x=0;x<9;x++)
       for(y=0;y<9;y++)
       {
         current=fgetc(fp);
         if(current!=EOF&current!=' '&current!='\n')
              sudokuArray[x][y] = current-'0';
       }

此代码无法正常运行。 sudokuArray [0] [0]给出结果为真(文件中的第一个数字),但[0] [1]给出一些随机数,如131231304. [0] [2]给出了[0] [1]应该是什么。那是为什么?

3 个答案:

答案 0 :(得分:1)

我不确定为什么使用嵌套循环从文件中读取。我在你的代码中看到一个问题:

改变&amp;到&amp;&amp;:

     if(current!=EOF&current!=' '&current!='\n')

为:

 if(current!=EOF && current!=' ' && current!='\n')

&&是逻辑AND&是按位AND。

因为,你只有整数而且你似乎知道确切的没有。整数。您只需使用fscanf

即可
fscanf(fp, "%d", &arr[x][y]);

答案 1 :(得分:1)

这是因为如果你的内循环:

for(y=0;y<9;y++)
{
    current=fgetc(fp);
    if((current!=EOF) && (current!=' ') && (current!='\n'))
        sudokuArray[x][y] = current-'0';
}

如果您的输入为7 4 5 1,则在y == 0时,您会看到'7',其中会加入sudokuArray[0][0]

现在进入下一个循环y == 1,然后阅读' '。由于您的if语句,您不会将其放在sudokuArray 中,但y仍然会增加

下次执行循环y == 2时,您会看到'4'并将其放入sudokuArray[0][2]

因此fgetc()可以正常工作,而且您的代码完全按照您的要求执行操作。代码非常听话。

修改:另请注意,您的if语句应包含&&而不是&。他们是不同的运营商。一个小的空格和一些括号使代码更易于阅读和维护。

答案 2 :(得分:0)

在循环中你忽略了字符 - 但是即使你没有填充相关的数组元素,你也会增加索引。尝试重新实现:

#include <stdlib.h>

for(x=0;x<9;x++)
    for(y=0;y<9;y++)
      {
      /* Get next character */

      current=fgetc(fp);

      /* Loop, retrieving additional chars, until either EOF is hit or 
         you find a non-whitespace character */

      while(current != EOF && iswhite(current))
        current = fgetc(fp);

      if(current != EOF)
        sudokuArray[x][y] = current - '0';
      }

另外 - 您要检查current != EOF,还是!feof(fp)

分享并享受。