C语言出现死循环

我想用循环编写一个处理非法字符输入的程序,但是运行的时候却出现一行行What you input is illegal. Please try it again!,无休止循环下去图中是代码
运行结果是这样的

这要看你输入什么了。
有一个要点: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 );

别人的解释。参考吧

温馨提示:内容为网友见解,仅供参考
无其他回答

C语言中的死循环是什么意思
在编程中,一个靠自身控制无法终止的程序称为"死循环"。不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。然而,在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。例如,我们使用的电脑操作系统下的...

我的c语言程序没有报错为什么会执行不了?
在C语言中,程序没有报错并不意味着程序一定是正确的。有时候,程序可能会出现逻辑错误或者运行时错误,导致程序无法执行或者输出不符合预期。以下是一些常见的导致程序无法执行的原因:1. 程序陷入死循环:程序在某个地方出现了死循环,使得程序无法继续向下执行。如果程序似乎无法结束,可以检查程序是否存在...

c语言,为何这是死循环?
while(1)表示无条件执行循环(因为1表示真),而它的循环体是后面跟着的那个语句:也就是printf("%d",k-=3);所以程序会一直运行printf("%d",k-=3); 永远出不来。这条语句就相当于 while(1){ printf("%d",k-=3);} 加上大括号里面可以加多个语句作为循环体,如果没加大括号就是while后面的...

C语言死循环
if(++i%3==0) break; \/\/这一句永远也不执行,所以跳不出循环,出现死循环了。}

C语言里死循环怎么结束
1、C语言中,强制终止死循环可以用CTRL+BREAK组合键或者CTRL+C组合键。2、命令解释:CTRL+BREAK 设置或清除 DOS 系统的扩展。CTRL+C 检测这个命令是为了与 DOS 系统的兼容而保留的,在 Windows里不起作用。如果命令扩展被启用,并且操作平台是Windows,BREAK 命令会在被调试程序调试时输入一个硬代码中...

C语言到#结束,但为什么我的程序会陷入死循环啊?
因为是在while前输入的数据,循环过程中这个数据一直存在。把scanf("%f%c%f",&a,&b,&c); while(b!='#'){改成while(scanf("%f %c%f",&a,&b,&c)==3 && b!='#'){。把所有的continue;删除。

C语言死循环
1、if(k==0) continue;应该break而不是continue 2、while后边少了一个{ i++后也少了一个} 使得循环内i得不到变化,所以死循环。3、不应该那么打印。正确代码如下:include<stdio.h> void main(){ int i,j,k;i=1;while(i<=100){ for(j=2;j...

有什么问题 死循环了 C语言
\/\/while (str[i]!=0) \/\/ 死循环是这里导致的,这里只判断了第一个数不为零,然后进入了死循环 逻辑也有问题,帮你修正如下,仔细和你的对比下,并调试通过。望采纳!!!include<stdio.h> void main(){ int m,n,t,count=0,i;int str[100]={'0'};scanf("%d%d",&m,&n); \/\/ ...

C语言死循环怎么办
先关了死循环的程序,在把改程序修改,主要是要找到循环的终止条件,找出要满足你程序的一个条件,把它卸载循环内的话,用if 语句判断之后,满足你的限制条件之后,用 break,跳出循环,如果是用 for 循环,可以再循环的时候就设置循环的终止条件,for(AAA;BBB;CCC), 中的 表达式 BBB ,就是循环的...

C语言中死循环怎么解决?
C语言中死循环怎么解决?首先应该将对应的退出条件置为恒为真,然后按照“while循环”“for循环 ”“do-while循环”三个循环模式分别描述。在这个过程中,还要注意管理好循环控制变量,使while 的条件有机会为FALSE,或在循环体中加入break,并使它有机会执行。另外,也可以设置循环计数变量。为了防止程序...

相似回答