我已经尝试了这么久,我似乎无法让它发挥作用。程序一直参考每个输入值的第一个条件。有谁知道代码有什么问题吗?
#include <iostream>
using namespace std;
int main()
{
int grade;
cout <<"Enter a grade between 0 and 100:";
cin>>grade;
if (0 <= grade <= 59){
cout<<"The grade for " <<grade<<" is F";
}
else if (60 <= grade <= 69){
cout<<"The grade for " <<grade<<" is D";
}
else if (70 <= grade <= 79){
cout<<"The grade for " <<grade<<" is C";
}
else if (80 <= grade <= 89){
cout<<"The grade for " <<grade<<" is B";
}
else if (90 <= grade <= 100){
cout<<"The grade for " <<grade<<" is A";
}
system("pause");
return 0;
}
答案 0 :(得分:10)
重写警卫
0 <= grade <= 59
带
0 <= grade && grade <= 59
C ++解析你的表达式:
(0 <= grade) <= 59
所以它将bool
值与59进行比较。也就是说,布尔true
为1并触发第一个if
块
答案 1 :(得分:1)
你不能以这种方式写0 <= x <= 59
。或者更确切地说,你可以,但它并不代表你认为它意味着什么。
这样分析。 0 <= x
被评估,并被确定为真或假。这些布尔值分别由1或0表示。然后评估结果1 <= 59
或0 <= 59
,并始终被视为真。
顺便说一下,我认为,当你学习编程时,Java会成为一种很好的语言。它的强类型,这大致意味着这样的事情会产生编译时错误,而不是做一些你并不真正意味着的事情。
答案 2 :(得分:1)
检查范围条件你做错了。
衡量范围的正确方法是使用&&
运算符。
做这样的事情:
if (grade>=0 && grade <= 59) // it means grade is greater or equal to 0 and grade is lesser or equal to 59
为每个if条件替换类似的