我有像7,4,5,1这样的文件。我想把这些数字放在一个多维数组中。
for(x=0;x<9;x++)
for(y=0;y<9;y++)
{
current=fgetc(fp);
if(current!=EOF¤t!=' '¤t!='\n')
sudokuArray[x][y] = current-'0';
}此代码不能正常工作。sudokuArray给出的结果是真的(文件中的第一个数字),但给出了一些随机数,如131231304。给出了它应该是什么样子。为什么会这样呢?
发布于 2012-06-07 20:13:14
这是因为如果你的内部循环:
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语句应该包含&&而不是&。它们是不同的运算符。一个小的空格和一些括号使代码更容易阅读和维护。
发布于 2012-06-07 20:11:22
我不明白你为什么要使用嵌套循环来读取文件。我在你的代码中发现了一个问题:
将&更改为&&:
if(current!=EOF¤t!=' '¤t!='\n')至:
if(current!=EOF && current!=' ' && current!='\n')&&是逻辑AND,&是按位AND。
因为,你只有整数,而且你似乎知道确切的no。整数的集合。您可以简单地使用fscanf
fscanf(fp, "%d", &arr[x][y]);发布于 2012-06-07 20:11:47
在您的循环中,您忽略了字符-但是,即使您没有填充相关的数组元素,您也会递增索引。尝试将其重新实现为:
#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)
分享和享受。
https://stackoverflow.com/questions/10931443
复制相似问题