标题: C语言if语句不满足条件执行 其它怎么写?附代码 [打印本页]

作者: 非凡科技    时间: 2021-4-15 15:11
标题: C语言if语句不满足条件执行 其它怎么写?附代码
   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输入了低电平  我想这几个条件都没满足  去执行另一个任务下面怎么写啊    小白一枚特来求助


作者: DSFGSF    时间: 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;
  }
}
作者: man1234567    时间: 2021-4-15 17:09
进Main之后首先要初始化系统,比如在循环外先将 sw1_in=1 试试。
作者: ANT1987    时间: 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;程序判断三次之后就跳出循环了
    }
作者: 非凡科技    时间: 2021-4-15 21:29
ANT1987 发表于 2021-4-15 17:53
我看你的程序花括号有问题吧,还有你的while(1)循环里面为什么会放break???核对一下:
while(1)
    ...

这是一个检测  检测完要退出去的  如果不加退出  就一直死在这里了   前面还有条件呢  这个程序就是按下按键检测几个IO的状态  
作者: 名字不是重点    时间: 2021-4-15 22:20
如果能确定要判断的值(多个),就用switch。。。case
如果确定要判断的值不等于某值,就用 if (regx != value)
作者: cheney03    时间: 2021-4-16 08:55
用 if else if else
if(条件1)
        语句1;
else if(条件2)
        语句2;
else (条件3)
        语句3;
先判断条件1,条件1不满足,再去判断条件2,条件2不满足,再判断条件3,以此类推
作者: cheney03    时间: 2021-4-16 08:59
或者用switch case,比较直观

switch(表达式){
    case 整型数值1: 语句 1,break;
    case 整型数值2: 语句 2,break;
    ......
    case 整型数值n: 语句 n,break;
    default: 语句 n+1,break;
}
作者: 啊哈哈123    时间: 2021-4-16 09:16
首先 你这边确定状态1,2,3是不是互斥,如果是互斥的那就用上if elseif ,而且判断条件里就要有sw1_in&&sw2_in总共有四种可能,什么状态下执行什么。还是说状态之间是独立的,你现在的语法是状态2条件满足,状态1 会先执行。
作者: 非凡科技    时间: 2021-4-16 10:07
cheney03 发表于 2021-4-16 08:59
或者用switch case,比较直观

switch(表达式){

这是按下按键后检测几个IO的电平  switch括号里面的表达式写什么?日出我也想怎么写但是  这个不是次数之类的变量啊  求解答
作者: 非凡科技    时间: 2021-4-16 10:19
这是一个水位检测的程序 ,我只是先用两个水位试试,最终是四个水位探头,由低到高排列水位1.2.3.4检测出水位信号后发送遥控信号(在水位几就闪几次)由于水位传感器的排列 所以正常的水位信号是1234连续的  如果2号探头坏掉  在水位到达3号位置时会只有1.3出现低电平所以需要报警提示有探头出现问题  我就想要这个效果
作者: yhang18    时间: 2021-4-16 10:30
你的状态2包括状态1的情况,话句话说,(sw1_in==0&&sw2_in==0)
                                                       (sw1_in==0&&sw2_in==1)都会导致执行(sw1_in==0)




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1