оператор if — условие C ++ верно, но не работает

Я пытаюсь создать простую программу, которая запрашивает оценку, является ли она числовым или средневзвешенным, например, 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;
}

-4

Решение

Хорошо, вот несколько советов:

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. Что я могу сказать, так это то, что все зависит. Однако основные моменты, с которыми согласны почти все:

  • двойные числа — обычное использование для типов с плавающей точкой.
  • удваивает опережает поплавки в современном оборудовании.
  • удваивается с одинаковой или лучшей точностью, что плавает. float (точность до 6 десятичных знаков) удваивается (точность до 15 десятичных знаков).
  • размер двойного хранилища 8 байт против размера хранилища с плавающей запятой 4 байта.

Поэтому все зависит, в этом случае я бы согласился на удвоение :), но опять-таки все зависит от условий и того, чего именно мы пытаемся достичь; производительность? точность? пространство?

Кроме того, вы просите двойные значения, верно? где диапазон от 0 до 100 верно? если это так, просто проверьте, если (grade >= 0 && grade <= 100),

Затем, если пользователь вводит 1, как вы можете сказать, находится ли он в шкале от 0-100 или 0-5. Вы видите, что вы должны помнить об этом также, иначе это просто войдет в первое утверждение if, которое он найдет. О да, я получил 4/100, потому что меня проверяют по шкале от 0 до 5, которую я прохожу 🙂

1

Другие решения

Любое число больше 122 потерпит неудачу, потому что ascii of z равно 122, поэтому grade!=grade>='a'&&grade<='z' не удастся.

а также grade!=grade>='A'&&grade<='Z'потерпит неудачу (Z ascii 90)

Кстати, поскольку оценка двойная, она будет равна нулю, если пользователь введет незаконное число. Просто проверьте if(grade !=0)

-1

По вопросам рекламы [email protected]