-1

如果我为 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

4 回答 4

2

因为 theelse只绑定到最后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");
   }
}
于 2013-10-14T02:44:55.210 回答
1
  1. 您的布尔表达式不正确。范围包含需要&&,没有||

  2. else条款仅适用于最新 if声明;如果您只想在if较早的未成功时才运行后面的语句,那么您需要将它们放在自己的else子句中。

于 2013-10-14T02:44:53.950 回答
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);
    }
    
于 2013-10-14T03:55:41.687 回答
0

如果您不想使用“else if”,那么您可能需要提供标志来检查 else
POSSIBILITY 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

使用开关盒。

于 2013-10-14T04:41:21.220 回答