Mon programme ne demande pas à l’opérateur la deuxième fois

#include #include main(){ int b,c,r,d; char a; while(1){ printf("Enter the operator\n"); scanf("%c",&a); if(a=='+') d=1; if(a=='-') d=2; if(a=='&') d=3; if(a=='|') d=4; if(a=='.') d=5; printf("Enter the operands\n"); scanf("%d",&b); scanf("%d",&c); switch(d){ case 1:r=c+b; break; case 2:r=cb; break; case 3:r=c&b; break; case 4:r=c|b; break; case 5:exit(0); deafult:printf("Enter a valid operator"); } printf("Result = %d\n",r); } } 

Sortie:

 Enter the operator + Enter the operands 8 7 Result = 15 Enter the operator Enter the operands 

scanf("%d",... lira un nombre (en sautant l’espace au préalable) mais laissera la nouvelle ligne dans le stream d’entrée. scanf("%c",... lira le premier caractère et ne sautera pas d’espace.

Une modification simple consiste à utiliser

 scanf(" %c", &a); 

Ceci indiquera à scanf d’ignorer les espaces avant le caractère.

Cela à cause de la fonction scanf width param “% c”, après la 1ère boucle temporelle, à la ligne scanf("%d",&c); , comme + , il y a un caractère de fin de ligne dans le stream d’entrée, puis la seconde boucle, scanf, récupère le caractère de fin de ligne comme entrée et l’parsing comme un ; Pour résoudre ce problème, vous pouvez append un scanf("%c"); ligne juste après scanf("%d",&c);

jetez un oeil à l’ erreur scanf en c lors de la lecture d’un caractère