如何在Switch语句中使用IF

Mus*_*sif 1 c++ average switch-statement

如何在Switch语句中应用条件,我想计算平均值:但是我已经尽力解决问题,但仍然没有得到Switch语句的输出.我是C++的初学者,

#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");
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*oey 7

那么,switchcases与您给出的变量进行比较.因此,对于case 1它试图比较avg,以1之后,它会去与你的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;
} ...
Run Code Online (Sandbox Code Playgroud)

但即便如此,根据您的技能,可以更优雅地处理.例如,您可以除以10平均值,并使用switch上,利用整数除法截断事实上,倒塌之间的一切50,并59进入同一个桶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;
  ...
}
Run Code Online (Sandbox Code Playgroud)

另外你会注意到你每次都打印» 你的平均值是:... «所以你可以在条件之前移动那条线:

cout << " Your Average is: " << avg << endl;
switch (avg / 10) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

最后,由于您有一个非常小的可能结果列表,您可以在数组中收集它们并简单地引用相应的数组元素,甚至不需要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;
Run Code Online (Sandbox Code Playgroud)


bri*_*ith 7

switch语句用于执行依赖于特定值的一个代码块.从某种意义上说,switch语句可以被认为是if语句的一种形式:代码

switch (avg) {
   case 1 : { /* code block 1 */ } break;
   case 2 : { /* code block 2 */ } break;
   default : { /* code block default */ } break;
}
Run Code Online (Sandbox Code Playgroud)

可以读作

if (1 == avg) { /* code block 1 */ }
else if (2 == avg) { /* code block 2 */ }
else { /*code block default */ }
Run Code Online (Sandbox Code Playgroud)

您的switch语句可以读作

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

并且没有办法avg可以== 1并且大于80且小于100,这就是为什么你没有得到任何输出.

在C++中,switch语句不适合测试范围; 我只是使用if语句:

if ( (avg<=100) && (avg >=80))
{
   // you get an A
} else if ...
Run Code Online (Sandbox Code Playgroud)

但是,如果你真的需要使用一个开关,有几种方法可以解决它:

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.
Run Code Online (Sandbox Code Playgroud)

这很难看,但它一个开关声明.使用switch语句的一种更简洁的方法是将avg"强制"为离散值,而不是范围.

int percentile = avg / 10;  // integer division. 
Run Code Online (Sandbox Code Playgroud)

现在范围将介于0和10之间,假设avg介于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.
Run Code Online (Sandbox Code Playgroud)

希望这是有帮助的.