程序
int main(void)
{
int sum;
while(scanf(“%d",&sum)!=1)
printf("ABC\n");
return 0;
}
运行后输入字符a,为什么会一直重复输出ABC
而把循环改成while(scanf(“%d",&sum)==1)
输入数字只输出一次ABC
三点:
scanf从缓冲区读取:你输入的字符串会保存在一个缓冲区内,scanf在正确的时候是到这个缓冲区中读取字符,并且从缓冲区中删除字符。但如果是%d格式碰到了字母,则不会读取也不会删除,之后ABC还在缓冲区内。
scanf不停止:如果缓冲区内有内容,scanf是不会停下来等你输入的,因为ABC一直在缓冲区内,所以造成了一直不停重复循环。
scanf的返回值:scanf如果成功返回的是输入的个数,当你输入ABC的时候,scanf失败,返回0,则条件一直成立,所以造成了死循环