#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