2014-10-07 92 views
2

我一直试图这么久,我似乎无法得到这个工作。程序一直参考每个输入值的第一个条件。有人知道代码有什么问题吗?C++如果其他条件

#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

替代同类每一个在一个旁注,看看[关于系统这个问题(“暂停”)(HTTP://计算器.COM /问题/ 1107705/systempause - 为什么 - 是 - 它-错误)。 – risingDarkness 2014-10-07 09:15:57

回答

10

重写卫士

0 <= grade <= 59 

0 <= grade && grade <= 59 

C++解析表达式是这样的:

(0 <= grade) <= 59 

所以bool值与59比较这就是说,布尔true是1并且第一个if区块被触发

+0

谢谢,真的有帮助 – vsingh72 2014-10-07 08:07:10

1

您不能以这种方式编写0 <= x <= 59。或者说,你可以,但这并不意味着你的想法。

它得到这样的分析。 0 <= x被评估,并被确定为真或假。这些布尔值分别由1或0表示。然后对得到的1 <= 590 <= 59进行评估,并将始终视为真实。

顺便说一下,我认为在开始学习编程时,首先要让Java成为一门良好的语言。这是强类型,这大致意味着像这样的事情会产生编译时错误,而不是做你并不真正的意思。

1

你在做错检查范围条件。 测量范围的正确方法是使用&&操作符。

做这样的事情:

if (grade>=0 && grade <= 59) // it means grade is greater or equal to 0 and grade is lesser or equal to 59 

如果条件