【发布时间】:2023-04-07 18:02:01
【问题描述】:
注意:请注意这不是 Why is scanf() causing infinite loop in this code? 的重复项,我已经看到了这个问题,但问题是他检查的是 ==0 而不是 !=EOF。另外,他的问题不同,那里的“无限循环”还在等待用户输入,只是没有退出。
我有以下while循环:
while ((read = scanf(" (%d,%d)\n", &src, &dst)) != EOF) {
if(read != 2 ||
src >= N || src < 0 ||
dst >= N || dst < 0) {
printf("invalid input, should be (N,N)");
} else
matrix[src][dst] = 1;
}
其目的是以 (int,int) 格式读取输入,在读取 EOF 时停止读取,并在收到无效输入时重试。
问题是,scanf 仅适用于第一次迭代,之后有一个无限循环。程序不等待用户输入,它只是假设最后一个输入是相同的。
read、src 和 dst 的类型为 int。
我看过类似的问题,但他们似乎无法检查 scanf 是否返回 0 而不是检查EOF,并且答案告诉他们切换到EOF。
【问题讨论】:
-
从
scanf中删除\n -
@user3121023 ,不好,输入无效后会停止接收输入。
-
@CoolGuy 我实际上是在没有
\n的情况下开始的,遇到了同样的问题。我添加它是因为我从另一个问题中看到了对它的推荐。对于您的第二个问题,任何输入 - 有效或无效 - 都会复制问题。 -
@Tom ,在
if的正文中尝试int c;while((c=getchar())!='\n' && c!=EOF); -
@Tom ,只需在
printf("invalid input, should be (N,N)");之后添加int c;while((c=getchar())!='\n' && c!=EOF);