2013-10-14 70 views
-1

如果我爲x輸入值205,該函數應該打印出「first quad」,但是當我測試我的函數時,它會打印出「first quad」和「not sure」。我無法弄清楚爲什麼,任何幫助表示讚賞!爲什麼我的函數打印這條語句?

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"); 
    } 
} 
+2

我打電話給shenanigans。你的代碼應該打印出除「'不確定\ n」'之外的所有消息。要麼你沒有準確地描述問題,要麼你沒有提供真實的代碼。 –

+0

我很抱歉,但這絕對是我真正的代碼,我永遠不會發布無助或無效的內容。問題是當我爲x輸入205時,我的程序打印出「first quad」和「not sure」消息。 – Karen

+0

除非你的編譯器被破壞了,否則你發佈的代碼絕對不會做你聲稱它在205'被傳遞給它時所做的。任何人都可以編譯它並輕鬆演示它沒有。如果你不相信我,請參考(http://ideone.com/HztlKJ)。 –

回答

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"); 
    } 
} 
+0

如果我們不能使用「else if」會怎麼樣?有沒有辦法讓它在沒有這些的情況下完成? – Karen

+0

@凱倫你**不能**使用'else if'?這沒有意義。 –

+0

是的,我的導師說我們不應該使用其他語句。 :(但我會再次問他,以防萬一 – Karen

1
  1. 你的布爾表達式是不正確的。範圍包含需要&&,而不是||

  2. else子句只適用於最新if聲明;如果你想運行後面的if語句,只有在先前沒有成功,那麼你需要把它們放在它們自己的else條款中。

0

如果你絕對不能使用「否則,如果」再試試這三種之一:

  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); 
    } 
    
0

如果你不想使用「否則,如果」,那麼你可能需要做的提供標誌來檢查條件中的其他
可能性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"); 
    } 


} 

POSSIBILITY 2

使用開關盒。