2015-04-28 3 views
3

Мои коды позволяют пользователю вводить счет от 1 до 100, что либо скажет им, что оценка «Хорошо», «ОК», «Морон», либо «Неверная».инструкция if-else

Но, когда я скомпилирую эти коды. Выход был неверен в нем тоже с правильным утверждением, если оно более чем 54.

Например:

  • , если я вхожу в 55 он будет говорить «OK» и «Invalid».
  • Если я войду в 54, он просто скажет «Морон».

Вот мои коды:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h> 
#include<stdlib.h> 

void main() 
{ 
    int score; 
    printf("Enter a Score"); 
    scanf("%d", &score); 
    if (score >=80 && score <= 100){ 
     printf("Good\n",); 
    } 
    if (score >=55 && score <=79){ 
     printf("OK\n",); 
    } 
    if (score >=1 && score <=54){ 
     printf("Moron\n",); 
    } 
    else{ 
     printf("Invalid\n"); 
    }  
    system("pause"); 
} 
+3

Посмотрите «еще если». – IMSoP

ответ

7

Это происходит потому, что вместо того, чтобы использовать один поток управления используется множество (таким образом, если условие выполняется до последнего if управления потоком (score >= 55 через score <= 100) else код из последнего также выполняется). Вы можете использовать else if ветви:

if (score >= 80 && score <= 100){ 
    printf("Good\n",); 
} else if (score >= 55 && score <= 79){ 
    printf("OK\n",); 
} else if (score >= 1 && score <= 54){ 
    printf("Moron\n",); 
} else { 
    printf("Invalid\n"); 
} 

Вы также можете использовать вложенные if/else заявления, но решение выше кажется менее громоздким.

3

вы 2 if-else заявления и как получить выполняются. Поэтому вы сделаете «что-то» для них обоих. Пройдите свой код с score=55, и вы найдете эту проблему.

2 решения:

  1. сделать if S "автономно" (так только один будет проходить)
  2. Добавьте несколько else с, чтобы обеспечить только один из ваших филиалов выполняет.
7

Каждое заявление if является отдельным условным заявлением. Ваш пример имеет три группы условных операторов:

  1. if (score >=80 && score <= 100)
  2. if (score >=55 && score <=79)
  3. if (score >=1 && score <=54) { ... } else { ... }

Так что если score имеет значение 55, он будет соответствовать против # 2 выше и else от # 3.

Одним из решений здесь было бы объединение вышеуказанных утверждений в одну группу. Вы можете сделать это с помощью else if.

например.

if (*expr*) { 
    ... 
} else if (*expr*) { 
    ... 
} else if (*expr*) { 
    ... 
} else { 
    ... 
} 
Смежные вопросы