C : lire un caractère

Fermé
Sara426 Messages postés 678 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 - 24 nov. 2011 à 20:44
juice92 Messages postés 46 Date d'inscription vendredi 25 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011 - 25 nov. 2011 à 17:23
Bonjour,

Je programme en C.

J'aimerais que l'utilisateur entre un caractère et si c'est 1 ou 2 alors le programme rentre dans le switch.

Mon programme ressemble à peu près à ça :
int u;
scanf("%d", &u);
while((u!=1)&&(u!=2))
printf("* Mauvaise saisie *\n
scanf("%d", &u);
switch(u)
{case 1: ..........


Ca marche très bien pour tous les nombres, seulement dès que je rentre une lettre ça boucle indéfiniment.

Je ne connais pas très bien le scanf alors est-ce quelqu'un pourrait m'aider ?

Merci.

Cordialement,
Sara.


2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 nov. 2011 à 14:06
Normal que ça boucle pour une lettre. Il faut vider le buffer clavier après tes scanf. Pour commencer, mets un simple getchar(). Si tu as besoin que ça ne plante pas même si l'utilisateur rentre une vraie phrase alors dis-le et on te fera un programme plus robuste.

Cdlt,
1
juice92 Messages postés 46 Date d'inscription vendredi 25 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011 9
25 nov. 2011 à 11:39
Une lettre est une chaine de caractère, alors %d ( pour double ) ou %f ( pour float ) ne marchera pas.

je ne me rappel plus trés bien mais si une chaine de caractère se déclare string alors ce sera %s
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
25 nov. 2011 à 17:16
%d c'est pour les entiers, pas pour les double

mais effectivement, on peut faire avec un %s, et deja ça marche mieux, pour une chaine (qui ne se déclare pas string mais comme un tableau de char)

voir plutot la proposition de fiddy qui me semble plus pertinente.
0
juice92 Messages postés 46 Date d'inscription vendredi 25 novembre 2011 Statut Membre Dernière intervention 28 novembre 2011 9
25 nov. 2011 à 17:23
ouai je suis un peu rouiller en C lol
0