2012-07-16 472 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