首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fgetc()不能正常工作

fgetc()不能正常工作
EN

Stack Overflow用户
提问于 2012-06-07 20:06:27
回答 3查看 879关注 0票数 0

我有像7,4,5,1这样的文件。我想把这些数字放在一个多维数组中。

代码语言:javascript
复制
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给出的结果是真的(文件中的第一个数字),但给出了一些随机数,如131231304。给出了它应该是什么样子。为什么会这样呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-07 20:13:14

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

代码语言:javascript
复制
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语句应该包含&&而不是&。它们是不同的运算符。一个小的空格和一些括号使代码更容易阅读和维护。

票数 1
EN

Stack Overflow用户

发布于 2012-06-07 20:11:22

我不明白你为什么要使用嵌套循环来读取文件。我在你的代码中发现了一个问题:

将&更改为&&:

代码语言:javascript
复制
     if(current!=EOF&current!=' '&current!='\n')

至:

代码语言:javascript
复制
 if(current!=EOF && current!=' ' && current!='\n')

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

因为,你只有整数,而且你似乎知道确切的no。整数的集合。您可以简单地使用fscanf

代码语言:javascript
复制
fscanf(fp, "%d", &arr[x][y]);
票数 1
EN

Stack Overflow用户

发布于 2012-06-07 20:11:47

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

代码语言:javascript
复制
#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)

分享和享受。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10931443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档