我有
#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'无效)
如何继续进行调试?
我现在对任何建议持开放态度。
任何提示/建议/帮助都将非常感谢!
答案 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
语句。