2014-10-07 6 views
2

Я так долго пытался это сделать, и я не могу заставить это работать. Программа продолжает ссылаться на первое условие для каждого входного значения. Кто-нибудь знает, что не так с кодом?C++ If Else условия

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

Замечание, что смотреть на [этот вопрос о системе ("пауза")] (HTTP: // StackOverflow .com/вопросы/1107705/systempause-почему-это-это неправильно). – risingDarkness

ответ

10

Rewrite охранники

0 <= grade <= 59 

с

0 <= grade && grade <= 59 

C++ анализирует ваше выражение так:

(0 <= grade) <= 59 

поэтому сравнивает bool значение с 59. При этом, логическое значение true есть 1 и первый if заблокирован блок

+0

СПАСИБО, что действительно помогло – vsingh72

1

Вы не можете написать 0 <= x <= 59 таким образом. Вернее, вы можете, но это не значит, что вы думаете, что это значит.

Это анализируется следующим образом. 0 <= x оценивается и определяется как истинный или ложный. Эти булевы представлены 1 или 0 соответственно. Затем получают оценку 1 <= 59 или 0 <= 59 и всегда будут считаться истинными.

Как в стороне, это похоже на то, что я думаю, что я хочу, чтобы Java стал хорошим языком для начала, когда вы учитесь программировать. Это строго типизировано, что примерно означает, что такие вещи генерируют ошибки времени компиляции, а не делают то, что вы на самом деле не имели в виду.

1

Вы делаете это неправильно для проверки состояния диапазона. Правильный способ измерения диапазона - использовать оператор &&.

ли что-то вроде этого:

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

заменить аналогичный для каждого, если условие

Смежные вопросы