Scanf n’parsing pas le caractère% c, mais ignore l’instruction. Pourquoi?

J’ai écrit un programme en utilisant l’instruction de cas de commutation et demandé un caractère pour la saisie, mais il ne demande pas le caractère dans la fenêtre de la console mais le passe complètement

int main() { float a, b, ans; char opr; printf("\nGIVE THE VALUES OF THE TWO NUMBERS\n"); scanf(" %f %f",&a,&b); printf("\nGIVE THE REQUIRED OPERATOR\n"); //no display(echo) on the screen //opr = getch(); //displays on the screen //opr = getche(); scanf("%c",&opr); switch(opr) { case '+' : ans = a+b; printf("%f", ans); break; case '-' : ans = ab; printf("%f", ans); break; case '*' : ans = a*b; printf("%f", ans); break; case '/' : ans = a/b; printf("%f", ans); break; case '%' : ans = (int)a % (int)b; printf("%f", ans); break; default : printf("\nGIVE A VALID OPRATOR\n"); } system("pause"); return 0; 

mais quand je mets un espace avant %c dans le second scanf ça marche quelqu’un disait quelque chose à propos d’un espace que j’ai trouvé déroutant

Il a dit que le second scanf prend la valeur de \n tant que caractère et si je mets un espace avant %c dans le second scanf n’est-ce pas un caractère et ne prend-il pas l’espace en tant que caractère?

Mais dans ce programme, il ne prend pas le \n comme caractère

 int main() { char a; printf("\ngive a char\n"); scanf("%c",&a); printf("%c",a); return 0; } 

C’est vraiment déroutant, peut-on m’aider à comprendre ce qui ne va pas?

Chaque fois que vous utilisez scanf avec ce format:

 scanf("%c",&a); 

cela laisse une nouvelle ligne qui sera consommée à la prochaine itération. Le dernier programme que vous avez mentionné n’a qu’un seul “scanf”. essayez d’utiliser un autre scanf. vous aurez le même problème.

afin d’éviter les espaces blancs, vous devez écrire:

  scanf(" %c",&opr); 

l’espace avant la chaîne de format indique à scanf d’ignorer les espaces blancs. Ou c’est mieux d’utiliser

 getchar(); 

Il consumra toute votre nouvelle ligne

Le problème est que vous laissez le \n entré après les numéros non consommés, puis lu par le second scanf() . Si vous vérifiez la valeur dans opr vous verrez qu’il s’agit de ‘\ n’.

Le second programme prend le \n comme caractère.
Peut-être que vous n’avez simplement pas entré \n avant de saisir d’autres caractères.

exemple ( %c dans printf est remplacé par %d pour le rendre clair)

Essayez d’append fflush (stdin) avant scanf.