2015-05-23 4 views
0

Почему «Недействительный» появляется на моем выходе под всем? Недействительный выбор - последнее, что есть в меню, я использую это утверждение правильно или что именно не так?Неверный выбор кода появляется на экране вывода

#include <stdio.h> 

void two_assesments(); 
void three_assesments(); 
void four_assesments(); 
void five_assesments(); 
void six_assesments(); 

int main(void) 
{ 
    int c; 

    printf("\n*****Student Grade Calculator*****\n\n"); 
    printf(" Developed By...\n"); 
    printf(" Carlos\n"); 
    printf(" University of South Wales\n"); 
    printf(" =================================================================\n"); 
    printf("\n"); 

    printf("\n Please enter the number of assessments in the module : \n"); 
    scanf("%d",&c); 

    if (c==2) { 
     two_assesments(); 
    } 
    if (c==3) { 
     three_assesments(); 
    } 
    if (c==4) { 
     four_assesments(); 
    } 
    if (c==5) { 
     five_assesments(); 
    } 
    if (c==6) { 
     six_assesments(); 
    } 
    else 
     if (c=!7); { 
      { printf("\nInvalid"); } 
     } 

    return(0); 
} 
+0

его в основном это: - – carlos

+0

еще если (! С = 7); { {printf ("\ nInvalid"); } – carlos

ответ

2

Проблема здесь

else 
    if (c=!7); { . . . 

У вас есть ; после if()

Я хотел бы предложить вам использовать switch заявление как этот

switch (c) { 
    case 2: two_assesments(); break; 
    case 3: three_assesments(); break; 
    case 4: four_assesments(); break; 
    case 5: five_assesments(); break; 
    case 6: six_assesments(); break; 
    default: printf("\nInvalid\n"); 
} 

, чтобы сделать код более удобочитаемый.

0

Чтобы понять возникшую проблему, подумайте, что произойдет, если пользователь вводит 2. Первый оператор if оценивает значение true и вызывается функция two_assesments. Следующие три заявления if терпят неудачу. Затем мы доберемся до if (c==6). Это также терпит неудачу, поэтому оценивается else. И здесь у вас есть две проблемы.

Во-первых, это точка с запятой. Потому что у вас есть точка с запятой после if (c=!7) компилятор видит свой код как

if (c==6) { 
     six_assesments(); 
    } 
    else { 
     if (c=!7) 
      ; /* do nothing */ 
    } 
    printf("\nInvalid"); 

Другими словами, из-за точкой с запятой, окончательное if утверждение не имеет никакого эффекта, а printf даже не является частью else. Поэтому «Invalid» всегда печатается.

Другой проблемой является =!. То, что вы хотели сказать, было if (c!=7). Поменяв = и !, вы фактически назначаете 0 на номер c, а if всегда оценивает значение false. Компилятор должен сообщить вам об этом.

Немного улучшенная версия кода будет выглядеть следующим образом

if (c==2) 
     two_assesments(); 
    else if (c==3) 
     three_assesments(); 
    else if (c==4) 
     four_assesments(); 
    else if (c==5) 
     five_assesments(); 
    else if (c==6) 
     six_assesments(); 
    else 
     printf("\nInvalid");