правильное использование не равно в C? - PullRequest
0 голосов
/ 27 января 2019

У меня есть этот бит кода, в котором мне нужно ввести номера CRN конкретного курса, но если я введу что-либо, кроме этого номера, я хочу, чтобы он выдал ошибку, говорящую, что это не возможный выбор ответа.Я думал, что так работает! =, Но когда я набираю правильные ответы, я думаю, что получаю «Извините, что это не вариант»

if(amount == 1){
    printf("Enter the course number:\n");
    scanf("%f", &course);
        if(course != 4587){
            printf("Sorry invalid entry!\n");
        }
        else if(course != 4599){
            printf("Sorry invalid entry!\n");
        }
        else if(course != 8997){
            printf("Sorry invalid entry!\n");
        }
        else if(course != 9696){
            printf("Sorry invalid entry!\n");
        }
        else{
           switch(course)
                    {
                    case '4587':
                credit1 = 4;
                break;
                    case '4599':
                credit2 = 3;
                break;
                    case '8997':
                credit3 = 1;
                break;
                    case '9696':
                credit4 = 3;
                break;
                    }
        }

}

Ответы [ 3 ]

0 голосов
/ 27 января 2019

В настоящее время вы делаете следующее:

Если курс не 4587, выведите ошибку.Если это 4587, проверьте, что это также 4599. Если это не так, выведите ошибку ... и т. Д.

Как видите, даже если первый случай удовлетворен, это невозможночтобы соответствовать всем случаям, поскольку целое число может иметь только одно значение.

Попробуйте сделать что-то вроде этого:

if(course == 4587){
    credit1 = 4;
} else if(course == 4599){
    credit2 = 3;
} else if(course == 8997){
    credit3 = 1;
} else if(course == 9696){
    credit4 = 3;
} else {
    printf("Sorry invalid entry!\n");
}
0 голосов
/ 27 января 2019

При передаче %f в scanf возвращается тип float, который обозначает дробь.Со страницы руководства для scanf:

f

Соответствует необязательному знаку с плавающей запятой;следующий указатель должен быть указателем на число с плавающей запятой.

Позже, когда он сравнивается с числом целочисленных типов, происходит сбой.Переменная course, вероятно, должна быть объявлена ​​как int.

Позже, в случае переключения вы используете строки вместо целых чисел.Случаи, такие как case '4587':, должны быть case 4587:, и это будет работать.

0 голосов
/ 27 января 2019

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

       switch(course)
       {
         case 4587:
            credit1 = 4;
            break;
        case 4599:
            credit2 = 3;
            break;
        case 8997:
            credit3 = 1;
            break;
        case 9696:
            credit4 = 3;
            break;
        default:
            printf("Sorry invalid entry!\n");                
            break;
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...