矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2393|回复: 14

这个c语言函数啥意思

[复制链接]
     
发表于 2018-1-12 19:06:30 | 显示全部楼层 |阅读模式
这个括号内的参数是简化了还是省略了,感觉应该再补个=0上去才对啊。
啥意思。
感谢老师。
QQ图片20180112190331.png
     
发表于 2018-1-12 19:56:55 | 显示全部楼层
这是一种很常见的写法,while(表达式);当表达式的值不为0时,执行while函数里面的循环。这个表达式一般是按键的松键检测,按键的接法一般是一端接单片机的IO脚,另一端接地,当你按一下按键时,执行按键对应的程序操作,但由于单片机的工作速度太快了,所以在大循环里,你就算只按了一下按键,但单片机可能就执行了上百次的按下按键的操作了,这样显然不符合要求,所以就加上这一句,强制把单片机的执行中止,直到你松开按键,程序再继续执行。
按键没按下时,key1的值为1,表达式(!1)==0,所以 while(0);结果是不执行循环,程序继续向下执行,当按键按下后 key1的值为0,表达式(!0)==1 ,于是 while(1); 程序就永远在这里死循环了,直到松开按键,key1的值变为1,才继续向下执行。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-1-12 20:02:53 | 显示全部楼层
我的电脑! 发表于 2018-1-12 19:56
这是一种很常见的写法,while(表达式);当表达式的值不为0时,执行while函数里面的循环。这个表达式一般 ...

这个原理我倒明白,主要就是这个括号内的表达式,把==0给省略了,这样的写法也可以吗,主要是这个疑惑,看来可以简写啊。
回复 支持 反对

使用道具 举报

     
发表于 2018-1-12 21:34:51 | 显示全部楼层
不不不,楼主的理解是不准确的。

这个函数,是判断的括号内,也就是“表达式”的是什么,而不是“表达式”是什么。当“表达式”的值为0时跳出循环,为1时继续循环,且非零即为1。循环的跳出与否与表达式的形式无关,只与表达式最终的值有关。

比如:
unsigned char x;
x=某数;
while(x==0)
{
...
}

在上述程序段中,若x=0,那么x==0这个表达式会返回一个值,这个值是1,则循环继续;若x=3,那么x==0这个表达式返回0,则循环跳出。循环是否继续是根据x==0这个表达式所返回的值来判断的,而与这个表达式无关。

再比如:
bit x;
x=某数;
while(x)
{
...
}
在上述程序段中,若x=1,那么循环继续;若x=0,那么循环跳出。

明白了吗?

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-1-12 22:40:41 | 显示全部楼层
Edward 发表于 2018-1-12 21:34
不不不,楼主的理解是不准确的。

这个函数,是判断的括号内,也就是“表达式”的值是什么,而不是“表达 ...

大彻大悟,顿悟啊。
感谢老师提携。
回复 支持 反对

使用道具 举报

发表于 2018-1-12 22:42:22 | 显示全部楼层
我写打印车的程序里面用了大量的    while(!XXX)     
一开始我也是转不过弯。。   理解了就很简单了
回复 支持 反对

使用道具 举报

     
发表于 2018-1-13 10:09:19 来自手机 | 显示全部楼层
本帖最后由 小徒弟下山 于 2018-1-13 10:11 编辑

while(0==x)这种写法比while(x==0) { ... }好,因为写累了时==很容易写成=
回复 支持 反对

使用道具 举报

     
发表于 2018-1-13 15:35:21 | 显示全部楼层
少些个等号会报警的吧?
回复 支持 反对

使用道具 举报

     
发表于 2018-1-13 15:51:44 | 显示全部楼层
生鱼片 发表于 2018-1-12 20:02
这个原理我倒明白,主要就是这个括号内的表达式,把==0给省略了,这样的写法也可以吗,主要是这个疑惑, ...

不一样,前面那个是逻辑表达式,您这里是算术表达式,用途有区别。
回复 支持 反对

使用道具 举报

     
发表于 2018-1-14 11:08:01 | 显示全部楼层
Edward 发表于 2018-1-12 21:34
不不不,楼主的理解是不准确的。

这个函数,是判断的括号内,也就是“表达式”的值是什么,而不是“表达 ...

讲解的很到位!另外使用while(X)的时候,x最好是bit变量,尽量不要用char和int变量
回复 支持 反对

使用道具 举报

     
发表于 2018-1-16 00:22:14 来自手机 | 显示全部楼层
⒔號芭嚇即興 发表于 2018-1-12 22:42
我写打印车的程序里面用了大量的    while(!XXX)     
一开始我也是转不过弯。。   理解了就很简单了

打印车是什么东西
回复 支持 反对

使用道具 举报

发表于 2018-1-16 21:07:46 | 显示全部楼层
三个 发表于 2018-1-16 00:22
打印车是什么东西

第九届参赛作品打印车
回复 支持 反对

使用道具 举报

     
发表于 2018-1-16 23:29:12 | 显示全部楼层
c语言中,逻辑真和假 TRUE FAULSE 用数值代表,0 为 FAULSE,不为零 为TRUE 。比如  12==12 结果为 TRUE (即 1 )。 while(100) ,while(2 〉1) 都是无限循环。
回复 支持 反对

使用道具 举报

     
发表于 2018-1-16 23:46:35 | 显示全部楼层
你可以做个小实验 , if(3.1415) printf("it's true!\n"); 看看结果怎样?   
回复 支持 反对

使用道具 举报

     
发表于 2018-3-2 17:29:11 | 显示全部楼层
其实很好理解,二楼讲得很清楚了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-27 01:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表