C语言出现死循环
我想用循环编写一个处理非法字符输入的程序,但是运行的时候却出现一行行Whatyouinputisillegal.Pleasetryitagain!,无休止循环下去图中是代...
我想用循环编写一个处理非法字符输入的程序,但是运行的时候却出现一行行What you input is illegal. Please try it again!,无休止循环下去图中是代码
运行结果是这样的 展开
运行结果是这样的 展开
1个回答
展开全部
这要看你输入什么了。
有一个要点:scanf()的返回值是它成功读入值的个数。
如果你第一次输入一个整数,那么第一个scanf函数会成功读入一个整数,它的返回值就是1,即ret的值是1。那么for循环的关系表达式:ret!=1就不成立,整个循环就不会执行,程序直接停止。
如果你第一次输入了非整数,那么第一个scanf函数成功读入的值就是0,它返回0,即ret = 0。此时for循环的关系表达式:ret!=1成立,for循环才会开始迭代。
如果你的程序执行的时候一直在打印,不给你输入的机会,说明你清空输入缓冲区的函数fflush没起作用,缓冲区里保存的第一次非法输入一直都在。
你把
fflush(stdin);
改成:
while(getchar()!='\n');
就好了。
有一个要点:scanf()的返回值是它成功读入值的个数。
如果你第一次输入一个整数,那么第一个scanf函数会成功读入一个整数,它的返回值就是1,即ret的值是1。那么for循环的关系表达式:ret!=1就不成立,整个循环就不会执行,程序直接停止。
如果你第一次输入了非整数,那么第一个scanf函数成功读入的值就是0,它返回0,即ret = 0。此时for循环的关系表达式:ret!=1成立,for循环才会开始迭代。
如果你的程序执行的时候一直在打印,不给你输入的机会,说明你清空输入缓冲区的函数fflush没起作用,缓冲区里保存的第一次非法输入一直都在。
你把
fflush(stdin);
改成:
while(getchar()!='\n');
就好了。
更多追问追答
追问
为什么fflush不起作用?
追答
fflush是用于输出流的,不是用于输入流的,用在输入流是未定义行为!fflush(stdin)是不良
代码
7.19.5.2 The fflush function
If stream points to an output stream or an update stream in which the most recent
operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.
在C中,刷新缓冲区可以使用下面这样的代码:
while( ( ch = getchar() ) != '\n' && ch != EOF );
clearerr( stdin );
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询