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

Résolu/Fermé
maxime121294 Messages postés 13 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 5 février 2014 - 21 oct. 2012 à 16:02
maxime121294 Messages postés 13 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 5 février 2014 - 21 oct. 2012 à 23:20
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>
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
21 oct. 2012 à 21:36
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);
0
maxime121294 Messages postés 13 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 5 février 2014 5
21 oct. 2012 à 22:03
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 ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
21 oct. 2012 à 22:50
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);
0
maxime121294 Messages postés 13 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 5 février 2014 5
21 oct. 2012 à 23:20
d'accord j'ai compris merci beaucoup de m'avoir expliqué ça clairement !
0