问题1 输入字母时,输出的x=0,为何x=0时可以跳出for循环?
问题2 第一次输入0后,程序要求重新输入,再输入一个字母时,为何会出现自动无限循环?
输入e导致scanf读取失败,此时x的值是未定义的。
由于scanf读入失败,未能成功读取的字符e被留在输入缓冲区中;下次循环时,scanf又尝试读取输入缓冲区中的e,自然再次读取失败,因而陷入无限循环。
那为什么直接输入e时不会出现死循环?
追答由于第一点原因,x的值是不能确定的,所以if(x>0&&x<1000)是否成立也是不能确定的,如果成立,则不会陷入死循环;如果不成立,则陷入死循环。
此时正确的做法是判断scanf的返回值,而不是判断x的值。
for(;;)您的代码直接输入e后还是会有死循环,我最后加了getchar();后就解决了,感谢!
我已经补充了,在第7行加一行while(getchar()!='\n');即可,刚才忘记写了
本回答被提问者采纳