scanf(“%c”)自动读取10

时间:2016-01-31 06:11:08

标签: c scanf

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]); } 部分。任何人都可以帮我找到问题所在吗?

1 个答案:

答案 0 :(得分:4)

在第一次迭代中,键入一个字符并按 Enter scanf使用您输入的字符,将\n保留在标准输入流(stdin)中。

在第二次迭代中,scanf看到\n字符消耗它,因此不等待进一步的输入。

您可以使用以下命令告诉scanf阅读并放弃下一个字符:

scanf("%c%*c", &i);

或者您可以告诉scanf在阅读字符之前阅读并丢弃所有空格字符(如果有),然后使用以下字符将其存储在i中:

scanf(" %c",&i);
/*     ↑ Note the space */