Programme simple en C avec variable "char" qui ne fonctionne pas

[Résolu/Fermé]
Signaler
Messages postés
13
Date d'inscription
samedi 25 août 2012
Statut
Membre
Dernière intervention
5 février 2014
-
Messages postés
13
Date d'inscription
samedi 25 août 2012
Statut
Membre
Dernière intervention
5 février 2014
-
Bonjour à tous,

Je suis en 1ère année d'informatique et je ne comprends pas, après de long moments de recherche, pourquoi ce programme que j'ai écrit ne fonctionne pas correctement. C'est un programme simple qui affiche les nouvelles coordonnées d'un point selon le déplacement que demande l'utilisateur et selon les coordonnées également entrées pas celui-ci. Je pense que l'erreur est bête mais pourtant je ne la trouve pas. Merci de bien vouloir m'aider :)

#include <stdio.h>
#include <stdlib.h>

int main()
{
int x, y, boucle=1;
char deplacement;

while(boucle==1)
{
printf("Entrez l'abscisse du point: ");
scanf("%d", &x);
printf("Entrez l'ordonnee du point: ");
scanf("%d", &y);
printf("\nVers quelle direction voulez-vous deplacer le point ?\n\n");
printf("Vers le haut (h ou H)\n");
printf("Vers le haut (b ou B)\n");
printf("Vers le haut (g ou G)\n");
printf("Vers le haut (d ou D)\n\n");

scanf("%c%*c", &deplacement);

printf("\n");

switch(deplacement)
{
case 'h':
case 'H':
printf("Les coordonnees du point deviennent:\n\nx=%d\ny=%d\n\n", x, ++y);
break;

case 'b':
case 'B':
printf("Les coordonnees du point deviennent:\n\nx=%d\ny=%d\n\n", x, --y);
break;

case 'g':
case 'G':
printf("Les coordonnees du point deviennent:\n\nx=%d\ny=%d\n\n", --x, y);
break;

case 'd':
case 'D':
printf("Les coordonnees du point deviennent:\n\nx=%d\ny=%d\n\n", ++x, y);
break;
}

printf("Voulez-vous deplacer un nouveau point ?\n\n");
printf("1. Oui\n");
printf("2. Non\n\n");
scanf("%d", &boucle);
printf("\n");

while(boucle!=1 && boucle!=2)
{
printf("Saisie incorrecte. Veuillez selectionner l'un des 2 chiffres correspondant aux differents choix.\n\n");
scanf("%d", &boucle);
printf("\n");
}
}

return(0);

}

<config>Windows 7 / Chrome 22.0.1229.94</config>

3 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 768
Bonjour,

J'ai pas tout lu mais : scanf("%c%*c", &deplacement);
Avant, tu as un scanf("%d",...), donc tu as un \n dans le buffer clavier.
Il faut donc penser à faire un getchar() juste avant ton scanf("%c%*c", &deplacement);
Messages postés
13
Date d'inscription
samedi 25 août 2012
Statut
Membre
Dernière intervention
5 février 2014
3
Tout d'abord merci pour ta réponse, mais je ne comprends pas tout à fait... En fait, je n'ai pas appris a utiliser getchar() donc je pense que mon erreur ne doit pas être corrigée de la sorte. De plus, je ne vois pas pourquoi tu dis qu'un \n est dans le buffer clavier tandis que le scanf("%d") est un int et non un char. Alors en théorie il ne devrait rien y avoir d'enregistrer dans le buffer clavier non ?
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 768
Lorsque tu as scanf("%d", ...); le programme va lire le buffer clavier qui est initialement vide. Il va donc attendre que tu saisisses un nombre. Pour saisir le nombre dans la variable, tu dois le valider par la touche '\n'.
Ensuite ton programme va lire le nombre saisi et le stocker dans la variable. Et il va aussi laisser le \n.
Lorsque tu vas utiliser scanf("%c...",...); il va tenter de lire le buffer clavier et récupérer le \n. Là se trouve l'erreur.
Si tu n'as pas appris getchar(), utilise simplement scanf("%*c");
D'ailleurs, à la place de scanf("%c%*c", &deplacement); tu peux même mettre :
scanf("%*c%c", &deplacement);
Messages postés
13
Date d'inscription
samedi 25 août 2012
Statut
Membre
Dernière intervention
5 février 2014
3
d'accord j'ai compris merci beaucoup de m'avoir expliqué ça clairement !