打印
[51单片机]

初学者。关于 if else的。

[复制链接]
1576|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlpc|  楼主 | 2020-8-23 17:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xlpc 于 2020-8-23 17:17 编辑

#include<reg52.h>
#define uint unsigned int

uint x=0,y=0 ;

void main()
{               
        x=6;
        if     (x> 10) y=5 ;
        else if (x> 5) y=4;            
        else if (x> 3) y=3;            
}
   
代码如上, 因为在一个程序中要对变量进行分段判断并赋值,但是写了都不对。就单独建立了个工程,来观察一下。然后在 keil调试时,watch窗口里看到的变量数据会不对。
比如上面 x=6时,y=4才对。窗口里显示是2.不是为啥。

使用特权

评论回复

相关帖子

沙发
共轭富数| | 2020-8-23 17:41 | 只看该作者
你x等于6时,既满足大于5,也满足大于3,机器当然不知道y等于多少了。你在第二条判断加上x小于等于10,第三条加上小于等于5才行

使用特权

评论回复
板凳
copower| | 2020-8-23 18:02 | 只看该作者
void main()
{               
        x=6;
        if (x> 10) y=5 ;
        else if (x> 5) y=4;            
        else if (x> 3) y=3;   
        while(1);         
}

你截图看运行到while(1);的时候 y 的值是多少。


另外不要省略括号,好习惯受用一生,不好的习惯说不定哪天暴雷后悔莫及。
void main()
{               
        x=6;
        if (x> 10){
            y=5 ;
        }
        else if (x> 5){
            y=4;  
        }           
         else if (x> 3){
              y=3;
        }            
}

使用特权

评论回复
地板
比神乐| | 2020-8-23 18:56 | 只看该作者
应该在最好加个死循环

使用特权

评论回复
5
ayb_ice| | 2020-8-24 08:21 | 只看该作者
结束了,程序跑飞了

使用特权

评论回复
6
xlpc|  楼主 | 2020-8-24 09:22 | 只看该作者

没运行前。

运行后。。这个x=4是哪来的,想不通。还有左下的提示是啥意思。
编译时并没有错误。。

使用特权

评论回复
7
xlpc|  楼主 | 2020-8-24 09:23 | 只看该作者
共轭富数 发表于 2020-8-23 17:41
你x等于6时,既满足大于5,也满足大于3,机器当然不知道y等于多少了。你在第二条判断加上x小于等于10,第三 ...

if else 他不是满足了if的条件。他就不是就不执行else的对比了吗?

使用特权

评论回复
8
simonliu009| | 2020-8-24 12:43 | 只看该作者
本帖最后由 simonliu009 于 2020-8-24 12:45 编辑

你不要watch啊,直接printf不行吗另外,你6楼的括号位置不对.....仔细看看别人贴的和你的有啥区别

使用特权

评论回复
9
xyz549040622| | 2020-8-24 14:49 | 只看该作者
本帖最后由 xyz549040622 于 2020-8-24 14:53 编辑

仔细看你的代码,明显括号少了一个?
还有楼上说的,你不要条件同时满足两个else。
可以这么写
if((x>5)&&(x<=10))
{
}

使用特权

评论回复
10
xlpc|  楼主 | 2020-8-24 14:55 | 只看该作者
xyz549040622 发表于 2020-8-24 14:49
仔细看你的代码,明显括号少了一个?
还有楼上说的,你不要条件同时满足两个else。
可以这么写

感谢版主,,代码运行,还是有问题,不知道是不是我的keil有问题,还是怎么的?用了你的方法加了双对比单纯用if,没有用else嵌套来做。现在程序没有问题了。。

使用特权

评论回复
11
比神乐| | 2020-8-24 14:57 | 只看该作者
xlpc 发表于 2020-8-24 09:22
没运行前。

运行后。。这个x=4是哪来的,想不通。还有左下的提示是啥意思。

把while加在最后,仿真,停在while那,看y=?

使用特权

评论回复
12
xlpc|  楼主 | 2020-8-24 14:59 | 只看该作者
结贴,结贴。。基实只是做个孩子学校的科技制作,把N年前的学的拿出来再弄弄。。用的是现成的模块,然后对回传的数据判断,再做相应动作。。。代码是简单的,主要是串口通讯,数据发送,接收处理这块。在这个坛子里学到很多。

使用特权

评论回复
13
比神乐| | 2020-8-24 15:02 | 只看该作者

看,就是4.
你那种写法没错。

使用特权

评论回复
评论
dami 2020-8-25 09:46 回复TA
keil有些版本有问题 
比神乐 2020-8-24 15:33 回复TA
@xyz549040622 :谢谢 
xyz549040622 2020-8-24 15:07 回复TA
为测试精神点赞。 
14
xyz549040622| | 2020-8-24 15:03 | 只看该作者
xlpc 发表于 2020-8-24 14:55
感谢版主,,代码运行,还是有问题,不知道是不是我的keil有问题,还是怎么的?用了你的方法加了双对比单 ...

不认为是keil的问题,if--else肯定是支持的,希望你继续调试,直至找到问题。单步调试看看。

使用特权

评论回复
15
wzm045| | 2020-8-24 15:03 | 只看该作者
编译器优化掉了,你要引用下一变量y

使用特权

评论回复
16
xyz549040622| | 2020-8-24 15:07 | 只看该作者
比神乐 发表于 2020-8-24 15:02
看,就是4.
你那种写法没错。

当然,楼主的写法一点错也没有。刚开始只是缺少了while而已,导致跑飞了,如果跑飞了,这种写法就会导致出现2的情况。错误都是累积的。
所以最好在书写的时候就规范,考虑到各种情况。

使用特权

评论回复
17
xyz549040622| | 2020-8-24 15:07 | 只看该作者
比神乐 发表于 2020-8-24 15:02
看,就是4.
你那种写法没错。

当然,楼主的写法一点错也没有。刚开始只是缺少了while而已,导致跑飞了,如果跑飞了,这种写法就会导致出现2的情况。错误都是累积的。
所以最好在书写的时候就规范,考虑到各种情况。

使用特权

评论回复
18
hobbye501| | 2020-8-25 14:39 | 只看该作者
watch太快了  你多加几个NOP 或者延时 打断点看看

使用特权

评论回复
19
isageko| | 2020-8-26 13:18 | 只看该作者
谢谢老哥

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝