语句需要表达整数类型('double'无效)

时间:2018-02-23 01:50:40

标签: c++ switch-statement double

我有

#include <iostream>
#include <iomanip>
using namespace std;

int main ()
{
    double score;


    cout << fixed << setprecision(2) << "Enter your grade score and I will give you a letter grade \n";
    cin >> score;

    if (score < 0 || score > 100)
        cout << "Enter a number less than 100 and greater than 0" << endl;

    switch (score)
    {
        case score > 90 :
            cout << score << "Grade: A";
        case score > 80 || score < 90  :
            cout << score << "Grade: B";
        case score > 70 || score < 80  :
            cout << score << "Grade: C";
        case score > 60 || score < 70  :
            cout << score << "Grade: D";
        case score < 60 :
            cout << score << "Grade: F";

    }
}

我一直在

  

语句需要表达整数类型('double'无效)

问题

如何继续进行调试?

我现在对任何建议持开放态度。

任何提示/建议/帮助都将非常感谢!

3 个答案:

答案 0 :(得分:2)

您不能在UIBarButtonSystemItem表达式中使用浮点数据类型,只能使用整数和枚举数据类型。

您不能在switch语句中使用布尔表达式,它必须是编译时整数/枚举常量值。

简而言之,您完全滥用case

如果您希望用户输入浮点值,那么您必须使用其他内容,例如switch

if/else

如果你必须使用#include <iostream> #include <iomanip> using namespace std; int main () { double score; cout << "Enter your grade score and I will give you a letter grade \n"; if (!(cin >> fixed >> setprecision(2) >> score)) cout << "Invalid input! Must be an integer or decimal number" << endl; else if ((score < 0.0) || (score > 100.0)) cout << "Invalid score, must be a number between 0 and 100, inclusive" << endl; else if (score >= 90.0) cout << "Grade: A" << endl; else if (score >= 80.0) cout << "Grade: B" << endl; else if (score >= 70.0) cout << "Grade: C" << endl; else if (score >= 60.0) cout << "Grade: D" << endl; else cout << "Grade: F" << endl; return 0; } ,那么你不能使用浮点类型,你必须使用整数类型,就像错误信息所说的那样。但是你必须为每个单独的整数值单独写switch,例如:

case

当您必须处理范围时,这是不可取的,因此您最终可能会使用#include <iostream> #include <iomanip> using namespace std; int main () { int score; cout << "Enter your grade score and I will give you a letter grade \n"; if (!(cin >> score)) cout << "Invalid input! Must be an integer number" << endl; else if ((score < 0) || (score > 100)) cout << "Invalid score, must be a number between 0 and 100, inclusive" << endl; else { switch (score) { case 100: case 99: case 98: case 97: case 96: case 95: case 94: case 93: case 92: case 91: case 90: cout << "Grade: A" << endl; break; case 89: case 88: case 87: case 86: case 85: case 84: case 83: case 82: case 81: case 80: cout << "Grade: B" << endl; break; case 79: case 78: case 77: case 76: case 75: case 74: case 73: case 72: case 71: case 70: cout << "Grade: C" << endl; break; case 69: case 68: case 67: case 66: case 65: case 64: case 63: case 62: case 61: case 60: cout << "Grade: D" << endl; break; default: cout << "Grade: F" << endl; break; } } return 0; } 来编写更短,更有效的代码。

if/else并不总是最好的方式。

答案 1 :(得分:1)

如果您坚持使用switch案例而不是if else代码,则会出现类似这样的情况。但是对于您的信息,由于您坚持使用switch案例,代码会在其中添加额外的几行代码,而如果是if else您可以在单行中编写代码代码

int main()
{
    double score;
    char grade;

    cout << fixed << setprecision(2) << "Enter your grade score and I will give you a letter grade \n";
    cin >> score;

    if (score < 0 || score > 100)
        cout << "Enter a number less than 100 and greater than 0" << endl;
    else
    {
        if(score > 90)
            grade = 'A';
        else if(score > 80 || score < 90)
            grade = 'B';
        else if(score > 70 || score < 80)
            grade = 'C';
        else if(score > 60 || score < 70)
            grade = 'D';
        else if(score < 60)
            grade = 'F';

        switch (grade)
        {
            case 'A' :
                cout << score << "Grade: A";
            //case 'B', case 'C' so and so on...
            ...
        }
    }
}

答案 2 :(得分:0)

根据cppreference,switch语句的条件可能是:

  

整数或枚举类型的任何表达式,或上下文隐式可转换为整数或枚举类型的类类型的表达式,或具有括号的此类型的单个非数组变量的声明 - 或者等于初始化器。

由于double不是整数类型(它是浮点类型),因此不能在switch语句中使用它。如果您希望用户只输入整数等级,您甚至无需使用它。您遇到的另一个问题是,您的每个案例陈述都会落到case下方而没有相应的break。因此,您还应该为每个break语句添加case语句。