2012-07-16 468 views
1

如何應用if語句中的條件,我想計算Average:但是我試過最好解決問題但仍然沒有從Switch語句輸出。 我剛使用C++,如何在Switch語句中使用IF

#include <iostream> 

using namespace std; 

int main() 
{ 
    //declaration of variables. 
    int sub1,sub2,sub3, sub4,sub5,total,avg; 

    //accepting marks from user in each subject 
    cout << " Enter Programming in C++ Marks: " << endl; 
    cin >> sub1; 
    cout << " Enter Software Engineering Marks : " << endl; 
    cin >> sub2; 
    cout << " Enter Personal Communication Marks : " << endl; 
    cin >> sub3; 
    cout << " Enter Database Application Marks: " << endl; 
    cin >> sub4; 
    cout << " Enter Computer Concept Marks: " << endl; 
    cin >> sub5; 

    //calculatin sum of marks obtained in each subject 
    total = (sub1 + sub2 + sub3 + sub4 + sub5); 

    //calculating the average marks 
    avg = total/5; 

    // starting of if condition for finding out grades of total subjects. 

    switch (avg){ 
     case 1:{ 
     if ((avg >= 80) && (avg <= 100)) 
     { 
      cout << " Your Average is: " << avg << endl; 
      cout << "You Grade is A+ " << endl; 
     } 
     break; 
     } 
     case 2:{ 
     if ((avg >= 70) && (avg <= 79)) 
     { 
      cout << " Your Average is: " << avg << endl; 
      cout << " Your grade is A " << endl; 
     }  
     break; 
     } 
     case 3:{ 
     if ((avg >= 60) && (avg <= 69)) 
     { 
      cout << " Your Average is: " << avg << endl; 
      cout << " Your Grade is B+ " << endl; 
     } 
     break; 
     } 
     case 4:{ 
     if ((avg >= 50) && (avg <= 59)) 
     { 
      cout << " Your Average is: " << avg << endl; 
      cout << " Your Grade is C+ " << endl; 
     } 
     break; 
     } 
     case 5: { 
     if ((avg >= 40) && (avg <= 49)) 
     { 
      cout << " Your Average is: " << avg << endl; 
      cout << " Your Grade is C- ! " << endl; 
     } 
     break;  
     } 
     case 6: { 
     if ((avg >= 30) && (avg <= 39)) 
     { 
      cout << " Your Average is: " << avg << endl; 
      cout << " Your Grade is D ! " << endl; 
     } 
     break; 
     } 

     default:{ 
     if ((avg >= 100) && (avg <= 29)) 
     { 
      cout << " Your Average is: " << avg << endl; 
      cout << " Your Grade is F, So you are Fail in the class ! " << endl; 
      break; 
     } 
     } 
    } 

    system("pause"); 
} 
+6

我想你錯過了開關盒的使用。取下開關盒,你會得到所需的輸出。 – brano 2012-07-16 13:34:19

+0

感謝您的寶貴回覆。我知道代碼是錯誤的鍵入,但我想清除我只是切換語句而已。 – 2012-07-17 17:11:12

回答

7

switch語句用於執行一個依賴於特定值的代碼塊。從某種意義上說,switch語句可以被認爲是一個if語句的形式:代碼

switch (avg) { 
    case 1 : { /* code block 1 */ } break; 
    case 2 : { /* code block 2 */ } break; 
    default : { /* code block default */ } break; 
} 

可以理解爲

if (1 == avg) { /* code block 1 */ } 
else if (2 == avg) { /* code block 2 */ } 
else { /*code block default */ } 

你的switch語句可以理解爲

if (1 == avg) 
{ 
    if ((avg >= 80) && (avg <= 100)) 
    { 
     cout << " Your Average is: " << avg << endl; 
     cout << "You Grade is A+ " << endl; 
    } 
} else if... 

並且沒有辦法avg可以== 1並且大於80且小於100,這就是爲什麼你沒有得到任何輸出。

在C++中,switch語句不適合測試範圍;我只是用一個if語句:

if ((avg<=100) && (avg >=80)) 
{ 
    // you get an A 
} else if ... 

但是,如果你真的需要使用一個開關,有幾個方法可以去了解它:

switch (avg) { 
    case 100: 
    case 99: 
    case 98: 
    ... 
    case 80 : { /* you get an A+ */ break; } 
    case 79 : 
    case 78 : 
    ... 
    case 70 : { /* you get a A */ break: } 
etc. 

這是醜陋的,但它一個switch語句。使用switch語句的一種更簡潔的方法是將avg「強制」爲離散值,而不是範圍。

int percentile = avg/10; // integer division. 

現在範圍將是0和10之間,假定的平均值是0和100之間這將使一個稍微清潔器開關:

switch (percentile) { 
    case 10 : 
    case 9: 
    case 8: /* You get an A+ */ break; 
    case 7: /* You get an A */ break; 
    case 6: /* You get a B+ */ break; 

etc. 

希望這是很有幫助的。

+0

親愛的布里斯密斯,我對我的解決方案感到非常困惑,我已經在if&else中完成了這項工作,但是我希望使用switch語句獲得相同的輸出結果。請儘量簡單,方便地切換。問候 – 2012-07-17 17:15:46

+0

@BinYousif希望我的編輯澄清我的答案。 – brismith 2012-07-17 18:27:42

+0

是的很明顯。我很感謝你的努力。請你告訴我如何接受anser – 2012-07-18 03:12:14

2

您正在使用切換有點不對,這不是if問題。這:

switch (avg){ 
    case 1:{ 
     if ((avg >= 80) && (avg <= 100)) 
     { 
      cout << " Your Average is: " << avg << endl; 
      cout << "You Grade is A+ " << endl; 
     } 
     break; 

的含義一樣

if(avg == 1) 
{ 
    if ((avg >= 80) && (avg <= 100)) 
    { 
     cout << " Your Average is: " << avg << endl; 
     cout << "You Grade is A+ " << endl; 
    } 
} 

如此明顯的情況永遠不會得到滿足。對於您的特定情況,您可以取下開關,只留下if

+0

兄弟,我現在明白我在這種情況下刪除了條件6:(avg> = 30)&&(avg <= 39); cout <<「您的平均值是:」<< avg << endl; cout <<「你的成績是D!」<< endl; 休息; { 默認值:(avg <= 29); cout <<「您的平均值是:」<< avg << endl; cout <<「你的成績是F,所以你在課堂上是失敗的!」<< endl; 休息; { – 2012-07-17 17:18:32

7

那麼,switchcase與您給它的變量進行比較。因此,對於case 1,它會在之後嘗試比較avg1,它將繼續與您的if聲明一起使用,當然聲明永遠不會應用。

我不確定你在那裏試着做什麼;所有我可以看到你是一個嵌套if更好:

if ((avg >= 80) && (avg <= 100)) 
{ 
    cout << " Your Average is: " << avg << endl; 
    cout << "You Grade is A+ " << endl; 
} else if ((avg >= 70) && (avg <= 79)) 
{ 
    cout << " Your Average is: " << avg << endl; 
    cout << " Your grade is A " << endl; 
} else if ((avg >= 60) && (avg <= 69)) 
{ 
    cout << " Your Average is: " << avg << endl; 
    cout << " Your Grade is B+ " << endl; 
} ... 

但即使這樣,可以更優雅的處理,這取決於你的技能。例如,您可以除以10平均值,並使用上switch,利用整數除法截斷事實上,倒塌5059之間什麼東西都往同一個桶5

switch (avg/10) { 
    case 10: 
    case 9: 
    case 8: 
    cout << " Your Average is: " << avg << endl; 
    cout << "You Grade is A+ " << endl; 
    break; 
    case 7: 
    cout << " Your Average is: " << avg << endl; 
    cout << "You Grade is A " << endl; 
    ... 
} 

而且你會發現,你打印»您的平均值是:...«每一次,所以你可以前條件移到該行:最後

cout << " Your Average is: " << avg << endl; 
switch (avg/10) { 
    ... 
} 

,因爲你有一個非常小的LIS可能的結果噸,可以收集它們在陣列中並簡單地引用適當的數組元素,甚至無需一個if/else ifswitch

char[][] grades = { 
    "F", "F", "F", "D", "C-", "C+", "B+", "A", "A+", "A+", "A+" 
}; 
char[] grade; 
if (avg > 100) 
    grade = "F"; 
else 
    grade = grades[max(0, avg/10)]; 

cout << " Your average is " << avg << endl; 
cout << " Your grade is " << grade << endl; 
+0

注意:所有代碼都未經測試,我的C/C++現在已經生鏽。但你應該得到一般的想法。更正歡迎:) – Joey 2012-07-16 13:46:02

+0

我的親愛的。感謝您的時間和有價值的答覆與您的答覆(完美答覆)我解決了我的問題。 – 2012-07-17 17:46:40

1

當你說

Switch(avg) 

{ 
    case 1: 
    break; 
} 

它是相同如同說if(avg == 1)。所以刪除您開關的情況下,處理像這樣

if ((avg >= 80) && (avg <= 100)) 
//do this 
else if ((avg >= 70) && (avg <= 79)) 
//do that 
+0

如何在交換機中執行此操作。我是否必須創建所有案例?例如從1到100。 – 2012-07-17 17:19:52

3

的代碼總是在默認statment去,因爲你的switch敘述將不會得到任何輸入作爲的情況下提供的。

+0

感謝您的回覆。你能否更清楚地定義它? – 2012-07-17 17:16:50

0

像1,2,3一樣的情況被switch語句識別爲avg的值。

您只能使用帶有特定值(而非間隔)的switch()控件。我建議你在這種情況下使用else。

或者你可以在多種情況下實現1條語句(但不會被讀取)。

switch(avg){ 
    case 80: case 81: case 82: //do this until 100 

     cout << " Your Average is: " << avg << endl; 
     cout << "You Grade is A+ " << endl; 
     break; 
} 

而且您不需要爲每種情況使用範圍(大括號)。

+0

哥哥讓我試試這個。我希望它對我有幫助 – 2012-07-17 17:23:21

0

最好也許最簡單的做法是擺脫switch語句並使用「if」和「elseif」。

+0

我已經在if&Else中完成了它,如果 – 2012-07-17 17:20:57

2

刪除Switch- case,你將得到你想要的輸出,因爲在這種情況下,它總是處於默認狀態。

+0

親愛的,請您讓它更清楚 – 2012-07-17 17:16:18