c++条件是正确的,但不工作

C++ condition is right but does not work

本文关键字:工作 条件 c++      更新时间:2023-10-16

我试图建立一个简单的程序,要求一个等级,无论是数字或一般加权平均,例如75,1.5分别。当用户输入在if条件中声明的非数字a时,它打印的错误与else条件中声明的一样。问题是,当我输入3位数,4位数,5位数等时,我得到一个错误,应该是Grade不在嵌套if中所述的范围内(else在if条件内)。输入0也是一样的。但好处是,当我输入一个负数或整数时,它能正常工作。我能问一下我的病情有什么问题吗?(提前通知)

#include <iostream>
using namespace std;
int main ()
{
double grade;
cout<<"Enter Grade or GWA: ";
cin>>grade;
if (grade!=grade>='a'&&grade<='z'||grade!=grade>='A'&&grade<='Z') 
/*The first If condition states that the user will get an error if 
input a non-numerical integer or number.*/   
{
    if (grade<=5&&grade>=1)
    {
        if (grade>2.5)
            cout<<"Failed"<<endl;
        else
            cout<<"Passed"<<endl;
    }
    else if (grade<75&&grade>=0)
        cout << "Failed" << endl;
    else if (grade>=75&&grade<=100)
        cout << "Passed" << endl;
    else
        cout<<"Grade is not within the scope!"<<endl;   
}
else
    cout<<"Error!"<<endl;

cin.get();
return 0;
}

好的,这里有一些提示:

grade!=grade>='a'&&grade<='z' 

这个不是那样工作的。grade<='z'是好的(语法正确)。然而,grade!=grade>='a'不是。例如,

int a =10;
int b=10;
int c=10;
if (a==b==c){
    cout<< "GOOD";
}
else{
    cout<< "NOT GOOD";
}

正如你所看到的,你会一直不太好。除非你写(a==b && b==c)

在阅读了@melpomene的评论后,它让我研究了更多关于应该使用什么数据类型,float, double或long double。我能说的是,这要视情况而定。然而,几乎每个人都同意的主要观点是:

  • 双精度类型通常用于浮点类型。
  • 在现代硬件中,
  • 的性能是浮点数的两倍。
  • double的精度等于或优于float。
  • 双存储空间8字节vs浮点存储空间4字节。

因此,这一切都取决于,在这种情况下,我同意双精度:),但这一切都取决于条件和我们到底想要达到什么;性能?,精度?,空间?。

同时,你要求双精度值,对吗?范围从0到100,对吧?如果有,请检查(grade >= 0 && grade <= 100)

那么,如果用户输入1,你怎么知道它是在0-100还是0-5的范围内。你必须记住这一点,否则它就会进入它找到的第一个if语句。哦,是的,我得到了4/100,但是因为我通过了0到5的等级检查:)

任何大于122的数字都将失败,因为z的ascii是122,所以grade!=grade>='a'&&grade<='z'将失败。

grade!=grade>='A'&&grade<='Z'将失败(Z ascii为90)

BTW,由于grade是双精度,如果用户输入非法数字,它将为零。查看if(grade !=0)