为什么我的功能会打印此声明?

时间:2013-10-14 02:42:16

标签: c if-statement printf

如果我为x输入值205,该功能应该打印出“第一个四边形”但是当我测试我的功能时,它打印出“第一个四边形”和“不确定”。我无法弄清楚为什么,感谢任何帮助!

void checkRoom(int x) {
   if ((x >= 203) || (x <= 216)) {
      printf("first quad\n");
   }

   if ((x >=217) || (x <= 229)) {
      printf("second quad\n");
   }

   if ((x >=232) || (x <= 238)) {
      printf("CSL\n");
   }

   if ((x >= 246) || (x <= 257)) {
      printf("classroom wing\n");
   }

   else {
      printf("not sure\n");
   }
}

4 个答案:

答案 0 :(得分:2)

由于else仅与最后if绑定,因此您需要的是else if。并且您的测试条件应使用&&而不是||

void checkRoom(int x) {
   if ((x >= 203) && (x <= 216)) {
      printf("first quad\n");
   }

   else if ((x >=217) && (x <= 229)) {
      printf("second quad\n");
   }

   else if ((x >=232) && (x <= 238)) {
      printf("CSL\n");
   }

   else if ((x >= 246) && (x <= 257)) {
      printf("classroom wing\n");
   }

   else {
      printf("not sure\n");
   }
}

答案 1 :(得分:1)

  1. 您的布尔表达式不正确。范围包含需要&&,而不是||

  2. else子句仅适用于最新 if语句;如果你想只运行较早的if语句,如果之前没有成功,那么你需要将它们放在自己的else条款中。

答案 2 :(得分:0)

如果绝对不能使用“else if”,请尝试以下三种方法之一:

  1. 在条件匹配时设置标志并在结束时测试条件。

    void checkRoom(int x) {
       int printed = 0;
       if ((x >= 203) && (x <= 216)) {
           puts("first quad");
           printed = 1;
       }
       if ((x >= 217) && (x <= 229)) {
           puts("second quad");
           printed = 1;
       }
       if ((x >=232) && (x <= 238)) {
           puts("CSL");
           printed = 1;
       }
       if ((x >= 246) && (x <= 257)) {
           puts("classroom wing");
           printed = 1;
       }
       if (printed == 0) {
           puts("not sure");
       }
    }
    
  2. 打印后返回,因此您不会继续执行决策树。

    void checkRoomOption2(int x) {
       if ((x >= 203) && (x <= 216)) {
           puts("first quad");
           return;
       }
       if ((x >= 217) && (x <= 229)) {
           puts("second quad");
           return;
       }
       if ((x >=232) && (x <= 238)) {
           puts("CSL");
           return;
       }
       if ((x >= 246) && (x <= 257)) {
           puts("classroom wing");
           return;
       }
       puts("not sure");
    }
    
  3. 将返回值设置为“不确定”,然后在匹配

    时覆盖它
    void checkRoomOption3(int x) {
       // you can only do this with a pointer if all the strings are literal strings
       // because then they have static storage and no memory needs to be allocated
       const char *r = "not sure";
       if ((x >= 203) && (x <= 216)) {
           r = "first quad";
       }
       if ((x >= 217) && (x <= 229)) {
           r = "second quad";
       }
       if ((x >=232) && (x <= 238)) {
           r = "CSL";
       }
       if ((x >= 246) && (x <= 257)) {
           r = "classroom wing";
       }
       puts(r);
    }
    

答案 3 :(得分:0)

如果您不想使用'else if',那么您可能需要提供标志来检查其他情况 可能性1

 void checkRoom(int x)
 {


   if ((x >= 203) && (x <= 216)) 
   {
      printf("first quad\n");
         flag=1;
   }



   if ((x >=217) && (x <= 229))
   {
      printf("second quad\n");
        flag=1;
   }


   if ((x >=232) && (x <= 238)) 
   {
       printf("CSL\n");
           flag=1;
   }


   if ((x >= 246) && (x <= 257))
   {
  printf("classroom wing\n");
        flag=1 ;
   }

   else if(flag !=1) 
   {
      printf("not sure\n");
   }


 }

可能性2

使用Switch case。