Я пытаюсь создать простую программу, которая запрашивает оценку, является ли она числовым или средневзвешенным, например, 75, 1,5 соответственно. И когда пользователь вводит не числовое число, указанное в если условие, он печатает ошибку, как указано в еще условие. Проблема в том, что при вводе 3-значного, 4-значного, 5-значного числа и т. Д. Появляется ошибка, которая должна быть Оценка не входит в сферу как указано во вложенном if (иначе внутри условия if). Также то же самое происходит, когда я ввожу 0. Но хорошо то, что, когда я ввожу отрицательное число или целое число, оно правильно работает. Могу я спросить, в чем проблема с моим состоянием? (Tnx заранее)
#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. Что я могу сказать, так это то, что все зависит. Однако основные моменты, с которыми согласны почти все:
Поэтому все зависит, в этом случае я бы согласился на удвоение :), но опять-таки все зависит от условий и того, чего именно мы пытаемся достичь; производительность? точность? пространство?
Кроме того, вы просите двойные значения, верно? где диапазон от 0 до 100 верно? если это так, просто проверьте, если (grade >= 0 && grade <= 100)
,
Затем, если пользователь вводит 1, как вы можете сказать, находится ли он в шкале от 0-100 или 0-5. Вы видите, что вы должны помнить об этом также, иначе это просто войдет в первое утверждение if, которое он найдет. О да, я получил 4/100, потому что меня проверяют по шкале от 0 до 5, которую я прохожу 🙂
Любое число больше 122 потерпит неудачу, потому что ascii of z равно 122, поэтому grade!=grade>='a'&&grade<='z'
не удастся.
а также grade!=grade>='A'&&grade<='Z'
потерпит неудачу (Z ascii 90)
Кстати, поскольку оценка двойная, она будет равна нулю, если пользователь введет незаконное число. Просто проверьте if(grade !=0)