c++条件是正确的,但不工作
C++ condition is right but does not work
我试图建立一个简单的程序,要求一个等级,无论是数字或一般加权平均,例如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)
- C++ 在条件未按预期工作时执行
- 唤醒多个线程以在每个条件下工作一次
- 为什么循环没有中断,并且 if 条件没有按预期工作?
- 当循环在条件C++之前停止工作时
- 如何正确地编写这些条件,以便它们在控制台中工作
- 如何编写一个通用函数,该通用函数在没有任何条件和条件的情况下工作(无论是真实和错误)
- if(x & y) 条件在 c++ 中的工作原理
- C++ 条件变量通知未按预期工作
- 逗号(,)在条件部分中两个表达式之间的for循环中的工作方式
- Boost::线程 / C++11 std::thread,想要唤醒工作线程的条件
- C++条件运算符在全局函数中使用时无法正常工作
- C++11:条件变量只工作一次
- 我在这里滥用了指针吗?虽然循环条件似乎无法正常工作
- 没有条件值的 FOR 循环"for (int i = 1; ; i++)"无法正常工作
- boost::timed_wait中的Notify条件变量只工作一次
- std::find条件语句未按预期工作
- Boost:等待工作线程等待条件变量
- ||操作员在while条件下未按预期工作
- 条件/三元运算符是如何工作的?c++
- c++条件是正确的,但不工作