C语言中什么叫死循环?怎么避免?
大家好,我是老马识电,很高兴为大家讲解一下单片机C语言里的死循环的实例,有讲不对的地方讲大家指教。
用常闭按键(或高电平)作键盘输入容易造成死循环。先看程序。
if (keyin==1)
{
delay(100);//防抖动
if (keyin==1)
{
bell();//声响提示松开按键
//键值处理
while(keyin==1)//等待松开按键
{}
delay(100);//防抖动
}
}
程序员意图用常闭按键作键盘,有键值输入后,等待操作人轻开键盘再往下执行程序。如果一段时间没有使用该按键,按键里的触点氧化无法接通时,键值就一直是断开(高电平)状态,此时就会在
while(keyin==1)//等待松开按键
{}
出现死循环。
因此,在单片机控制系统里应尽量用按键的常开点作键盘输入。
首先要说明的是死循环并不是C语言特有的,所有编程语言都会出现死循环,其次并不是所有的死循环都是有害的,有的是刻意为之的。比如很多后台服务框架在死循环里监听网络连接,然后给客户端提供服务。除了刻意为之的,通常死循环是有害的,且会使CPU使用率暴涨,如果要避免死循环需要养成良好的编程习惯,要保证迭代的条件变量能正常的达到退出条件。
死循环是程序执行一段代码,永远也不会退出,一直在这段程序内循环执行。
如何避免死循环?
1、首先你要知道,循环执行一段程序,你想要退出这段程序,你需要满足一个判断条件,当这个条件不满足时就会退出该段程序;
2、在设置循环的退出条件时,一定要注意这个条件会不会永远都在执行,所以在写循环条件的时候,一定要小心;
死循环定律?
死循环在心理学叫飞轮效应飞轮效应既惯性,飞轮在外加动力消失后靠惯性继续转动。
在编程中,一个靠自身控制无法终止的程序称为死循环。
例如在C语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。
不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。
在设计程序时,若遇到死循环,我们可以通过按下Ctrl+Pause/Break的方法,结束死循环。
C语言中如何实现两个死循环?
在C语言中,可以使用两个while循环来实现两个死循环。
首先需要定义两个布尔变量,比如isTrue1和isTrue2,并将其初始化为真。
然后在第一个while循环中,将要执行的代码放置在循环体内,同时判断isTrue1的值是否为真,如果是则继续执行循环,否则跳出循环。
同样,在第二个while循环中也是如此操作。
这样就可以实现两个死循环,因为两个循环中的条件永远为真,循环不会中断。
需要注意的是,在代码设计中应谨慎使用死循环,以免造成系统资源的浪费或程序的崩溃。