【问题标题】:C++ If Else conditionsC++ If Else 条件
【发布时间】:2025-12-05 02:30:01
【问题描述】:

我已经尝试了很长时间,但我似乎无法让它发挥作用。程序不断引用每个输入值的第一个条件。有人知道代码有什么问题吗?

#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;
}

【问题讨论】:

标签: c++ if-statement


【解决方案1】:

重写守卫

0 <= grade <= 59

0 <= grade && grade <= 59

C++ 像这样解析你的表达式:

(0 <= grade) <= 59

所以它将 bool 值与 59 进行比较。也就是说,布尔值 true 为 1,第一个 if 块被触发

【讨论】:

  • 感谢您的帮助
【解决方案2】:

您在检查范围条件时做错了。 测量范围的正确方法是使用&amp;&amp; 运算符。

做这样的事情:

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

为每个 if 条件替换相似

【讨论】:

    【解决方案3】:

    你不能这样写0 &lt;= x &lt;= 59。或者更确切地说,你可以,但这并不意味着你认为它意味着什么。

    它是这样分析的。 0 &lt;= x 被评估,并确定为真或假。这些布尔值分别用 1 或 0 表示。然后生成的 1 &lt;= 590 &lt;= 59 被评估,并且将始终被认为是 true。

    顺便说一句,当你学习编程时,我认为正是这样的事情使 Java 成为一门很好的语言。它是强类型,这大致意味着这样的事情会产生编译时错误,而不是做一些你并不真正想要的事情。

    【讨论】: