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");
}
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.