【发布时间】:2014-10-19 12:21:58
【问题描述】:
下面是我输入数字并打印的简单代码。它在 while(1) 循环内,所以我需要“输入无限次的数字 - 每次它都会打印数字并再次等待输入”。
#include<stdio.h>
int main()
{
int i;
while(1){
printf("\nenter i \n");
scanf("%d", &i);
if(i==1)
{
printf("%d \n", i);
}
}
return 0;
}
它工作正常。但突然我注意到如果我输入一个字符(例如:“w”)而不是数字,从那里它不会要求输入!!!** 它继续打印,
enter i
1
enter i
1
......
当我使用 GDB 进行调试时,我注意到在输入 "w" 后,字符 "w" 的值并没有存储在 &i 中。在我输入“w”之前,它有 0x00000001,以便在整个过程中打印“1”。
为什么它不要求另一个输入?据我所知,当我输入“w”时,“w”的 ascii 值应该存储在 &i 中。但它不会发生。
如果我把“int i;”放在
while循环内,它可以正常工作!为什么?
请按以下方式测试我的代码:
- 复制粘贴并运行它
- 当出现“输入 i”提示时,输入 1
- 第二次输入“w”。看看会发生什么……
【问题讨论】:
-
因为输入流中已经存在的虚假输入(您的
w)尚未删除。 -
scanf 不会消耗它不匹配的东西。您必须自己食用。
-
那么,基本上,你想说
scanf在你第一次输入w之后不再等待输入? -
%d是一个数字,对吧? -
@mr-cracker 是什么让您认为阅读
w和%d会导致w的 ASCII 值?
标签: c while-loop scanf infinite-loop