找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2015|回复: 20
打印 上一主题 下一主题
收起左侧

请教一个C语言IF语句问题

  [复制链接]
跳转到指定楼层
楼主
ID:113626 发表于 2020-3-4 23:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如图所示,我本想第二个IF语句动作的要求是M1等于1,还有K1等于0时才可以动作接通Y0,  但是实际程序中无论M1是否接通,只要K1接通的话Y0就可以接通,,请问为什么是这样的,,我这样写不是代表只有M1==1和K1==0时才可以接通Y0得嘛

捕获.PNG (14.19 KB, 下载次数: 39)

捕获.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:687694 发表于 2020-3-5 00:07 | 只看该作者
if(m1==0x01&&k1==0x00)
{
...;
}
回复

使用道具 举报

板凳
ID:419968 发表于 2020-3-5 01:19 | 只看该作者
改成 if((m1==0X01)&& (k1=0x00))

评分

参与人数 1黑币 +5 收起 理由
IdeaMing + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:113626 发表于 2020-3-5 08:05 | 只看该作者
lovexulu 发表于 2020-3-5 00:07
if(m1==0x01&&k1==0x00)
{
...;

这个可以,但是请问为什么会这样?是它IF语句规定了后面的条件到达了就判断为真这样吗
回复

使用道具 举报

5#
ID:113626 发表于 2020-3-5 08:07 | 只看该作者
adject 发表于 2020-3-5 01:19
改成 if((m1==0X01)&& (k1=0x00))

可以用两个括号的吗?不是只辨别括号内的条件嘛,如果两个括号不是就错了吗?请问你知道为什么我这样写不可以执行的吗
回复

使用道具 举报

6#
ID:46918 发表于 2020-3-5 08:10 | 只看该作者
if((m1==0X01)&& (k1==0x00))
{
   yanshi(10);
   if((m1==0X01)&& (k1==0x00))
  {
}
}
回复

使用道具 举报

7#
ID:46918 发表于 2020-3-5 08:17 | 只看该作者
if((m1==0x01)&&(k1==0x00))
{
    yanshi(10);
    if((m1==0x01)&&(k1==0x00))
    {
    Y0 =0X00;
    }
}
这样应该就可以了
回复

使用道具 举报

8#
ID:592807 发表于 2020-3-5 08:19 | 只看该作者
逗号的话时后一句有效,
回复

使用道具 举报

9#
ID:697917 发表于 2020-3-5 08:44 | 只看该作者
你的语法不对,条件&&条件
回复

使用道具 举报

10#
ID:377210 发表于 2020-3-5 09:49 | 只看该作者
语法错了
回复

使用道具 举报

11#
ID:633559 发表于 2020-3-5 12:51 | 只看该作者
首先,你为什么用逗号?
其次,你需要了解你所设想的,在C语言中是如何书写表达的,就你这问而言,你需要了解这个&&
&&:并且的意思
if(条件1&&条件2):当条件1为真并且条件2为真执行if语句里面的程序
还有个符号是||
||:或的意思
if(条件1||条件2):当条件1为真或条件2为真执行if语句里面的程序(两个条件有一个满足就能进去)
回复

使用道具 举报

12#
ID:687694 发表于 2020-3-5 12:58 | 只看该作者
孤独行者 发表于 2020-3-5 08:05
这个可以,但是请问为什么会这样?是它IF语句规定了后面的条件到达了就判断为真这样吗

你好,在C语言中if属于条件选择语句,结构为if(表达式){语句},其中表达式的含义即运算,在if语言表达式结果会强制转换为bit型,即1或0,1代表真,0代表假。真则执行后面{}中的语句,假则跳过。然而逗号在C语言中是一种优先级最低的运算符,它作为顺序求值,例如 a=(3,4,7) 结果a=7;再例 b=1;c=3;a=(5+(c+1,b);结果a=6;,运算总取最后一个表达式的值。现在再来看你写的那一句if(表达式1,表达式2)其结果就是if(表达式2),与表达式1无关,他们进行了逗号运算。接下来讲括号运算,数学中遵循括号中的表达式优先运算,在C语言中也有效,if((表达式1)&&(表达式2))这样结果也没有错,但是对于单片机来讲,它需要多一个括号运算。徒增内耗,并没有什么意义。
以上如有不正之处还望大佬们指出。
回复

使用道具 举报

13#
ID:550840 发表于 2020-3-5 13:46 | 只看该作者

if(m1==0x01&&k1==0x00)
回复

使用道具 举报

14#
ID:113626 发表于 2020-3-6 10:51 | 只看该作者
黄youhui 发表于 2020-3-5 08:19
逗号的话时后一句有效,

请问这是IF语句规定的吗?还是C语言规定所有语句都一样,请教
回复

使用道具 举报

15#
ID:113626 发表于 2020-3-6 10:52 | 只看该作者
想进步要学习 发表于 2020-3-5 12:51
首先,你为什么用逗号?
其次,你需要了解你所设想的,在C语言中是如何书写表达的,就你这问而言,你需要 ...

多谢解答
回复

使用道具 举报

16#
ID:113626 发表于 2020-3-6 10:58 | 只看该作者
lovexulu 发表于 2020-3-5 12:58
你好,在C语言中if属于条件选择语句,结构为if(表达式){语句},其中表达式的含义即运算,在if语言表达式 ...

非常感谢你的详细回答,在你结尾的时候提到双括号并不是很完美,,那么请问是不是要写成IF(M0==0X1&&K1==0X0)这样才是比较好的?还有在请问一下有没有什么好的书可以说明这些C语言的基础,想学习学习,非常感谢
回复

使用道具 举报

17#
ID:113626 发表于 2020-3-6 10:59 | 只看该作者
lyong0704 发表于 2020-3-5 13:46
if(m1==0x01&&k1==0x00)

试了下,这个也可以,,多谢回答
回复

使用道具 举报

18#
ID:703392 发表于 2020-3-6 14:57 | 只看该作者

改成 if((m1==0X01)&& (k1=0x00))
回复

使用道具 举报

19#
ID:560467 发表于 2020-3-6 16:04 | 只看该作者
你应该写if((m1==0)&&(k1==0)) ,你这个写的语法不对。建议你好好看看c语言的书。
回复

使用道具 举报

20#
ID:437615 发表于 2020-3-7 09:02 来自手机 | 只看该作者
这个是基础语法知识,&&表示并且并列的意思
回复

使用道具 举报

21#
ID:420836 发表于 2020-3-7 09:32 | 只看该作者
语法错了, 应该写成
if ((m1==0x01) && (k1==0x00))
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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