c语言中 为什么有时候输入.就陷入死循环了???

供稿:hz-xin.com     日期:2024-05-06
C语言。为什么输入字母会陷入死循环。怎么改才能正常运行。

输入字母会陷入死循环...
毕竟你scanf的是float类型的变量,当然会了。。。
或者用while循环getchar,把多余的字母都收了...
当然,具体怎么做我不清楚,毕竟我也只能算一个不那么白的小白...

输入数据后,判断一下scanf函数的返回状态,返回0则读取失败。失败的原因有很多可能,比如你的这道例子,指定输入数字,但是却输入了字符,就会返回0,而且scanf不会有动作。由于num没有初始化,所以它是一个垃圾值,这就是死循环的原因。
另外,如果想要输入指定字符退出的话,在多加一个判断即可。

那要看你输入的是什么,还有具体问题具体分析。
比如说有的时候让你输入除数,你输入了0。0是不能做除数的,而你的程序中又没有列出当用户输入0时,程序应该干什么,是应该报错呢,还是当做1处理呢。计算机不知道该怎么做,他只知道0不能做除数,那么结果就不能被计算出来,所以程序就只能等在哪个地方,也就是死循环了。
类似的,比如你让用户输入一个数字,你规定当用户输入 1 时,就执行程序 1 ,当用户输入 2 时,就执行程序 2 。就只有这两种情况,可是如果用户输入的是 3 或者其他的什么数时,那应该执行什么呢?你没说,计算机就更不知道了。除了死循环还能干什么呢?
再比如说你程序本身逻辑上的错误如 for(int i=10;i<11; )
{
sum=sum+i;
}
这个 for 循环中 i 始终不变,而且 i 始终满足循环条件,那么当程序执行时就永远陷在这个循环中出不来了,也就是死循环,这应该叫临界条件不明确。
还有的时候,计算量太大,比如调用递归函数太多,计算比较慢,你也可能认为是陷入死循环了。也有是因为计算机系统本身的原因。不过这种情况比较少。
总的来说就是编程序的人考虑不够周全,如果把所有的情况都考虑进去,让每种情况都能执行下去,就基本上不会出现死循环了。
解决办法嘛,第一种,你可以在程序中把用户输入的数据先判断一下是不是0,如果是就报错,不是就继续执行。 第二种,你可以给出其他情况的解决办法, switch 语句不就是这样吗,每一个 case 值都给出一种执行语句,最后还要有一个 default 语句来预防个别想不到的情况吗?其实思想都是相同的。 第三种的话,没办法,你只能是在写程序的时候认真点,写完后在认真检查一下。其实归根结底还是你想到想不到的问题。
基本上就这么多了,考虑周全一点,我是不是常说吗,不要把你的客户当成比你还厉害的人,要把客户想的最傻,你才能编写出最完美的程序来。
希望能对你有所帮助,加油!!

我也不明白这点,也遇到过这样的事,以我的推测吧!就是当输入数据类型与需要的数据类型不一样时,就产生输入异常,但C语言里本身没有处理异常的能力,从而导致程序异常,时而死循环,或而程序异常退出。

看下循环的条件是不是一直满足,如果是的话,就去修改下。

那要看你写了什么代码了

应该是你写的语句不正确导致死循环,
你的问题问的很不清晰