我的文件类似于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 [0] [0]给出结果为真(文件中的第一个数字),但[0] [1]给出一些随机数,如131231304. [0] [2]给出了[0] [1]应该是什么。那是为什么?
答案 0 :(得分:1)
我不确定为什么使用嵌套循环从文件中读取。我在你的代码中看到一个问题:
改变&amp;到&amp;&amp;:
if(current!=EOF¤t!=' '¤t!='\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)
?
分享并享受。