-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

0

「else if」を絶対に使用してはならない場合は、次の 3 つのいずれかを試してください。

  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 の条件をチェックするフラグを提供する必要がある可能性があります。可能性
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ケースを使用。

于 2013-10-14T04:41:21.220 に答える