2015-04-28 346 views
3

我的代碼允許用戶輸入1到100的分數,這會告訴他們得分是「好」,「好」,「莫倫」或「無效」。if-else語句

但是,當我編譯這些代碼。輸出在它無效也有正確的說法,如果它超過54

例如:

  • ,如果我在55進入,它會說「OK」和「無效」。
  • 如果我在54中輸入,它只會說「Moron」。

這裏是我的代碼:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h> 
#include<stdlib.h> 

void main() 
{ 
    int score; 
    printf("Enter a Score"); 
    scanf("%d", &score); 
    if (score >=80 && score <= 100){ 
     printf("Good\n",); 
    } 
    if (score >=55 && score <=79){ 
     printf("OK\n",); 
    } 
    if (score >=1 && score <=54){ 
     printf("Moron\n",); 
    } 
    else{ 
     printf("Invalid\n"); 
    }  
    system("pause"); 
} 
+3

查找「else if」。 – IMSoP

回答

7

它發生,因爲不是使用一個控制流量使用多臺(因此,如果條件是通過score <= 100最後if控制流(score >= 55見過面),也執行從最後一個else代碼)。您可以使用else if分支:

if (score >= 80 && score <= 100){ 
    printf("Good\n",); 
} else if (score >= 55 && score <= 79){ 
    printf("OK\n",); 
} else if (score >= 1 && score <= 54){ 
    printf("Moron\n",); 
} else { 
    printf("Invalid\n"); 
} 

您也可以使用嵌套if/else語句,但是上面的解決方案似乎不太麻煩。

3

你有2個if-else報表和都得到執行。所以你會爲他們做「事情」。與score=55一起瀏覽你的代碼,你會發現問題。

2解決方案:

  1. 充分利用if的 「獨立」(所以只有一個會通過)
  2. 添加一些else s到確保只有你一個分支執行。
7

每個if語句是一個獨立的條件語句。你舉的例子有三組條件語句:

  1. if (score >=80 && score <= 100)
  2. if (score >=55 && score <=79)
  3. if (score >=1 && score <=54) { ... } else { ... }

所以,如果score的值爲55,它會匹配對上面的#2,#的else 3。

這裏的一個解決方案是將上述語句合併到一個組中。你可以用else if來做到這一點。

例如

if (*expr*) { 
    ... 
} else if (*expr*) { 
    ... 
} else if (*expr*) { 
    ... 
} else { 
    ... 
}