J'ai ce bout de code où je dois entrer des numéros CRN spécifiques de cours, mais si j'entre autre chose que ce numéro, je veux qu'il me donne une erreur disant que ce n'est pas un choix de réponse possible. Je pensais que c'était ainsi que le! = Fonctionnait, mais lorsque je saisis les bonnes réponses, je pense que le message "Désolé, ce n'est pas une option"

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;
                    }
        }

}
c
-1
Aidan Agee 27 janv. 2019 à 21:45

3 réponses

Meilleure réponse

Cela ne fait pas ce que vous pensez. Votre autre n'est que si la valeur ==, donc vérifier par rapport à d'autres valeurs n'a pas de sens

       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;
      }
2
P__J__ 27 janv. 2019 à 18:53

En passant %f à scanf, il retournera un type float, qui représente une fraction. Depuis la page de manuel de scanf:

F

Correspond à un nombre à virgule flottante éventuellement signé; le pointeur suivant doit être un pointeur sur float.

Plus tard, quand il est comparé à un certain nombre de type entier, il échoue. La variable course devrait probablement être déclarée comme int.

Plus tard, dans le cas du commutateur, vous utilisez des chaînes au lieu d'entiers. Les cas tels que case '4587': devraient être case 4587: à la place, et cela fonctionnera.

2
eyalitki 27 janv. 2019 à 18:54

Actuellement, vous effectuez les opérations suivantes:

Si le cours n'est pas 4587, imprimez une erreur. S'il s'agit de 4587, vérifiez s'il s'agit également de 4599. Si ce n'est pas le cas, affichez une erreur ... et ainsi de suite.

Comme vous le voyez, même si le premier cas est satisfait, il est impossible qu'il réponde à tous les cas car un entier ne peut avoir qu'une seule valeur.

Essayez de faire quelque chose comme ceci:

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");
}
2
Ian Rehwinkel 27 janv. 2019 à 18:53