switch语句c ++帮助

时间:2011-09-28 19:15:32

标签: c++ conditional switch-statement

#include <iostream>

using namespace std;

int main()
{
    int score;
char grade;
cout << "Enter your score:" << endl;
cin >> score;
if (score >= 90)
    grade = 'a';
if (score >= 80)
    grade = 'b';
if (score >= 70)
    grade = 'c';
if (score >= 60)
    grade = 'd';
else 
    grade = 'f';
cout << grade << endl;
switch (grade) {
    case 'a':
        cout << "Good job" << endl;
        break;
    case 'c':
        cout << "Fair job" << endl;
        break;
    case 'f':
        cout << "Failure" << endl;
        break;
    default:
        cout << "invalid" << endl;
}
cin.get();
return 0;
  }

为什么当我输入95时,我应该收到案件时,它会给我我的默认开关案例

9 个答案:

答案 0 :(得分:7)

你错过了一堆else,或者以错误的顺序进行比较。

95大于90,但它也大于80,70和60.所以你会得到'd'。

(而且你没有在你的开关中处理'd'。)

答案 1 :(得分:6)

我相信你想要

if (score >= 90)
    grade = 'a';
else if (score >= 80)
    grade = 'b';
else if (score >= 70)
    grade = 'c';
else if (score >= 60)
    grade = 'd';
else 
    grade = 'f';

除了最后两种情况,60以上和以下,你所拥有的内容并不相互排斥。您的代码不会短路,它会检查1到5的所有内容。

if (score >= 90) // 1.
    grade = 'a';

if (score >= 80) // 2.
    grade = 'b';

if (score >= 70) // 4.
    grade = 'c';

if (score >= 60) // 5.
    grade = 'd';
else 
    grade = 'f';

答案 2 :(得分:2)

我认为你想要使用'else if',如果“得分&gt; = 60”这是真的,那么它会降到最后,而等级则等于“d”,这会在你的switch语句中产生默认情况

答案 3 :(得分:2)

你已经指定它使你的95满足所有的情况:95大于90,但也大于80和70等...

在这种情况下,最后一个获胜。

你可以通过使用else来解决它,或者将它包装在一个函数中,并在你知道所需的等级后立即返回:

char grade( int score ){
   if( score >= 90 ) return 'a';
   if( score >= 80 ) return 'b';
   ...
}

答案 4 :(得分:1)

if分支的排序错误(或者您需要提供其他分支:)

在此处观看:http://ideone.com/2uSZT

#include <iostream>

using namespace std;

int main()
{
    int score;
    char grade;
    cout << "Enter your score:" << endl;
    cin >> score;
    if (score >= 90)
        grade = 'a';
    else if (score >= 80)
        grade = 'b';
    else if (score >= 70)
        grade = 'c';
    else if (score >= 60)
        grade = 'd';
    else
        grade = 'f';

    cout << grade << endl;
    switch (grade)
    {
    case 'a':
        cout << "Good job" << endl;
        break;
    case 'c':
        cout << "Fair job" << endl;
        break;
    case 'f':
        cout << "Failure" << endl;
        break;
    default:
        cout << "invalid" << endl;
    }
    cin.get();
    return 0;
}

答案 5 :(得分:1)

这是因为你的if语句是最重要的。你应该使用其他ifs而不是个人ifs。发生的事情是你的90岁是否继续,然后是其他所有人。你的字母a基本上被覆盖了,因为95对所有其他的条件都是> =。使用else if会在找到真正的检查时中断其余的检查。

if (score >= 90)
    grade = 'a';
else if (score >= 80)
    grade = 'b';
else if (score >= 70)
    grade = 'c';
else if (score >= 60)
    grade = 'd';
else
    grade = 'f';

答案 6 :(得分:1)

因为所有score次比较都未与if/else if条件相结合。它们是独立的if陈述。因此,grade会覆盖95

答案 7 :(得分:0)

你需要改进你的if条件,你正在检查score >= no.输入95执行所有if语句,最后执行的语句现在是你的switch语句中的d {{ 1}}不存在,因此它执行case d

答案 8 :(得分:0)

你已经得到了一些答案,但我想我会建议稍微不同的可能性摆脱大部分控制流程并用一些数学代替:

char grades[] = "00000012344";

char *messages[] = {
    "Excellent Job",
    "Good job",
    "Average job",
    "Mediocre Job",
    "Failure"
};

if (score < 0 || score > 100)
    std::cout << "Invalid score";
else {
    int grade = grades[score/10];
    std::cout << messages[grade];
}

因此,我们使用score/10将0-100的分数变为0-10。然后我们查找得分的适当等级,f = 0,d = 1,c = 2,b = 3和a = 4。我们使用它来选择和打印出适当的消息。我为你跳过的字母添加了消息(可能是你想要的,也可能不是你想要的)。