web-dev-qa-db-fra.com

faire en boucle. C Programme

Je ne sais pas ce qui ne va pas avec mon programme. Chaque fois que j'essaie la sortie, il n'imprime que It is the season of Winter, Je ne sais pas comment résoudre ce problème.

int main() {
    int answer = 1;
    int mon;

    do {
        printf("Input a month : ");
        scanf("%d", &mon);

        if (mon == 1 || 2 || 12)
            printf("It is the season of winter\n\n\n");
        
        if (mon == 3 || 4 || 5) 
            printf("It is the season of spring\n\n\n");
        
        if (mon == 6 || 7 || 8)
            printf("It is the season of summer\n\n\n");
        
        if (mon == 9 || 10 || 11)
            printf("It is the season of fall\n\n\n");
        
        printf("Would you like to try again? (1= YES / 0= NO) : ");
        scanf("%d", &answer);
    
    } while (answer !=0);
    
    printf("\n\n\n");
}
1
Jao Cruz

Les conditions dans les déclarations de si sont incorrectes.

Par exemple considérons cela si la déclaration

if (mon == 1 || 2 || 12)

C'est équivalent à

if ( ( mon == 1 ) || ( 2 ) || ( 12 ) )

Ainsi, comme le deuxième et les troisièmes opérandes des opérateurs logiques OR ne sont pas égaux à 0, la condition est toujours évaluée à la véritable logique.

À partir de la norme C (6.5.14 logique OR Opérateur)

3 le || L'opérateur doit donner 1 si l'un de ses opérandes se comparent inégale à 0; Sinon, il donne 0. Le résultat a le type INT.

Vous devez écrire

if (mon == 1 || mon == 2 || mon == 12)

Également au lieu de la série de déclarations si il serait préférable d'écrire si -else si des déclarations comme

    if (mon == 1 || mon == 2 || mon == 12)
        printf("It is the season of winter\n\n\n");
    
    else if (mon == 3 || mon == 4 || mon == 5) 
        printf("It is the season of spring\n\n\n");
    
    else if (mon == 6 || mon == 7 || mon == 8)
        printf("It is the season of summer\n\n\n");
    
    else if (mon == 9 || mon == 10 || mon == 11)
        printf("It is the season of fall\n\n\n");

Dans ce cas, par exemple, si l'expression de la première instruction s'élève à la vraie toutes les autres déclarations si elles seront ignorées. C'est dans ce cas, vous pouvez éviter les évaluations redondantes des expressions des déclarations de si.

4
Vlad from Moscow