找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4402|回复: 11
收起左侧

C语言if语句不满足条件执行 其它怎么写?附代码

[复制链接]
ID:101869 发表于 2021-4-15 15:11 | 显示全部楼层 |阅读模式
10黑币
   while(1)
                      {  {if (sw1_in==0)//状态1
                          A=2;
                          TR0=1;}
                        {if (sw1_in==0&&sw2_in==0)//状态2
                          A=4;
                          TR0=1;}
              {if (sw1_in==1&&sw2_in==1)//状态3
                          A=10;
                          TR0=1;}
                         break; }         
现在问题是为什么没有满足状态2  却执行了状态1 状态1也没有满足啊   我只是sw2_in输入了低电平  我想这几个条件都没满足  去执行另一个任务下面怎么写啊    小白一枚特来求助

最佳答案

查看完整内容

你的大括号有问题,if语句的括号不是你这样加的.......还有,这种常量判断用switch更好,判断好坏的可以在switch里面写: while(1) { switch(sw1_in) { case 0: if(sw2_in==0) { xxxxxxxxx; } else { xxxxxxxxx; } break; case 1: if(sw2_in==0) { xxxxxxxxx; } else { xxxxxxxxx; } ...
回复

使用道具 举报

ID:569113 发表于 2021-4-15 15:11 | 显示全部楼层
本帖最后由 DSFGSF 于 2021-4-16 10:35 编辑

你的大括号有问题,if语句的括号不是你这样加的.......还有,这种常量判断用switch更好,判断好坏的可以在switch里面写:
while(1)
{
  switch(sw1_in)
  {
      case 0:
      if(sw2_in==0)
     {
          xxxxxxxxx;
      }
      else
     {
          xxxxxxxxx;
     }
    break;
    case 1:
    if(sw2_in==0)
   {
        xxxxxxxxx;
    }
    else
   {
        xxxxxxxxx;
   }
   break;
  }
}
回复

使用道具 举报

ID:584814 发表于 2021-4-15 17:09 | 显示全部楼层
进Main之后首先要初始化系统,比如在循环外先将 sw1_in=1 试试。
回复

使用道具 举报

ID:894154 发表于 2021-4-15 17:53 | 显示全部楼层
我看你的程序花括号有问题吧,还有你的while(1)循环里面为什么会放break???核对一下:
while(1)
    {  
      if(sw1_in==0)//状态1
       {
          A=2;
          TR0=1;
       }
      if(sw1_in==0&&sw2_in==0)//状态2
       {
          A=4;
          TR0=1;
       }
      if(sw1_in==1&&sw2_in==1)//状态3
       {
          A=10;
          TR0=1;
       }
       break; //这里如果放break;程序判断三次之后就跳出循环了
    }
回复

使用道具 举报

ID:101869 发表于 2021-4-15 21:29 | 显示全部楼层
ANT1987 发表于 2021-4-15 17:53
我看你的程序花括号有问题吧,还有你的while(1)循环里面为什么会放break???核对一下:
while(1)
    ...

这是一个检测  检测完要退出去的  如果不加退出  就一直死在这里了   前面还有条件呢  这个程序就是按下按键检测几个IO的状态  
回复

使用道具 举报

ID:824490 发表于 2021-4-15 22:20 | 显示全部楼层
如果能确定要判断的值(多个),就用switch。。。case
如果确定要判断的值不等于某值,就用 if (regx != value)
回复

使用道具 举报

ID:743654 发表于 2021-4-16 08:55 | 显示全部楼层
用 if else if else
if(条件1)
        语句1;
else if(条件2)
        语句2;
else (条件3)
        语句3;
先判断条件1,条件1不满足,再去判断条件2,条件2不满足,再判断条件3,以此类推
回复

使用道具 举报

ID:743654 发表于 2021-4-16 08:59 | 显示全部楼层
或者用switch case,比较直观

switch(表达式){
    case 整型数值1: 语句 1,break;
    case 整型数值2: 语句 2,break;
    ......
    case 整型数值n: 语句 n,break;
    default: 语句 n+1,break;
}
回复

使用道具 举报

ID:332214 发表于 2021-4-16 09:16 | 显示全部楼层
首先 你这边确定状态1,2,3是不是互斥,如果是互斥的那就用上if elseif ,而且判断条件里就要有sw1_in&&sw2_in总共有四种可能,什么状态下执行什么。还是说状态之间是独立的,你现在的语法是状态2条件满足,状态1 会先执行。
回复

使用道具 举报

ID:101869 发表于 2021-4-16 10:07 来自手机 | 显示全部楼层
cheney03 发表于 2021-4-16 08:59
或者用switch case,比较直观

switch(表达式){

这是按下按键后检测几个IO的电平  switch括号里面的表达式写什么?日出我也想怎么写但是  这个不是次数之类的变量啊  求解答
回复

使用道具 举报

ID:101869 发表于 2021-4-16 10:19 来自手机 | 显示全部楼层
这是一个水位检测的程序 ,我只是先用两个水位试试,最终是四个水位探头,由低到高排列水位1.2.3.4检测出水位信号后发送遥控信号(在水位几就闪几次)由于水位传感器的排列 所以正常的水位信号是1234连续的  如果2号探头坏掉  在水位到达3号位置时会只有1.3出现低电平所以需要报警提示有探头出现问题  我就想要这个效果
回复

使用道具 举报

ID:301978 发表于 2021-4-16 10:30 | 显示全部楼层
你的状态2包括状态1的情况,话句话说,(sw1_in==0&&sw2_in==0)
                                                       (sw1_in==0&&sw2_in==1)都会导致执行(sw1_in==0)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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