Je suis en train d'apprendre le language C. J'en suis donc au niveau du switch, else, if etc...
Je me suis donc lancé un petit "défi" qui est de faire une calculatrice (opération de base uniquement) en utilisant switch.
Cependant, lorsque j'arrive à l'étape au l'utilisateur doit taper le caractère pour indiquer l'opération qu'il souhaite effectuer, l'entrée clavier ne se fait pas et le programme passe directement au "default" de mon switch.
Voici mon code :
#include <stdio.h>
int main () {
int x, y;
char operation;
printf ("Valeur de la première valeur : ");
scanf ("%d", &x);
printf ("Quelle opération ? ");
scanf ("%c", &operation);
switch (operation) {
case '+' : {
printf ("Taper la deuxième valeur : ");
scanf ("%d", &y);
printf ("Résultat : %d \n", x+y);
}
break;
case '-' : {
printf ("Taper la deuxième valeur : ");
scanf ("%d", &y);
printf ("Résultat : %d \n", x-y);
}
break ;
case '*' : {
printf ("Taper la deuxième valeur : ");
scanf ("%d", &y);
printf ("Résultat : %d \n", x*y);
}
break;
case '/' : {
printf ("Taper la deuxième valeur : ");
scanf ("%d", &y);
printf ("Résultat : %d \n", x/y);
}
break;
default :
printf ("Vous avez appuyé sur une mauvaise touche \n");
break;
}
return (0);
}
En effectuant quelques recherches pour résoudre mon problème je sais qu'un getchar avant le "scanf ("%c", &operation)" arrange la chose. Cependant, j'aimerais résoudre ce problème sans l'utilisation de cette fonction que je n'ai pas encore vu et dont je ne connais pas l'utilisation ni le principe en lui-même (mis à part qu'il garde le caractère).
En effectuant quelques recherches pour résoudre mon problème je sais qu'un getchar avant le "scanf ("%c", &operation)" arrange la chose. Cependant, j'aimerais résoudre ce problème sans l'utilisation de cette fonction que je n'ai pas encore vu et dont je ne connais pas l'utilisation ni le principe en lui-même (mis à part qu'il garde le caractère).
La fonction scanf a un comportement très complexe, il est normal de peiner avec.
Ce qu'il faut savoir, c'est que les touches tapées sont envoyées en flux au programme. Voici le flux correspondant au calcul de 1+2:
1 \n + \n 2 \n
Comme tu vois, chaque pression de la touche Entrée insère un caractère '\n' dans le flux. Avec "%d", scanf consomme les caractères du flux en ignorant les blancs initiaux ('\n' est un blanc). Avec "%c" scanf prend le premier caractère rencontré. La fonction getchar fait de même. Pour ignorer les blancs initiaux avec scanf tout en utilisant "%c", il suffit d'écrire " %c" (noter l'espace initial).
Merci à tous pour vos réponses, je comprends mieux l'utilisation du getchar() ainsi que les "techniques" du scanf avec l'espace initial !
Problème avec l'utilisation du switch
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL