i
在上面的程序中,在第二次迭代期间,else
自动获取10.因此控件转到#include<stdio.h>
#include<string.h>
int main()
{
char puzzle[10][10], line[10];
int i,j, rows=0;
FILE *fp;
fp=fopen("arr.txt", "r");
if (fp== NULL) {
printf("Error in opening file\n");
return 1;
}
while(!EOF)
{
if(fgets(line, 10, fp) != NULL){
for(i=0; i<(strlen(line)-1); i++)
puzzle[rows][i] = line[i];
}
rows++;
}
for(i=0; i<10; i++)
for(j=0; j<10; j++)
printf("%c", puzzle[i][j]);
}
部分。任何人都可以帮我找到问题所在吗?
答案 0 :(得分:4)
在第一次迭代中,键入一个字符并按 Enter 。 scanf
使用您输入的字符,将\n
保留在标准输入流(stdin
)中。
在第二次迭代中,scanf
看到\n
字符消耗它,因此不等待进一步的输入。
您可以使用以下命令告诉scanf
阅读并放弃下一个字符:
scanf("%c%*c", &i);
或者您可以告诉scanf
在阅读字符之前阅读并丢弃所有空格字符(如果有),然后使用以下字符将其存储在i
中:
scanf(" %c",&i);
/* ↑ Note the space */