Probleme dans la boucle do... while

Fermé
Rahmaa - Modifié le 25 mars 2018 à 13:27
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 25 mars 2018 à 20:15
Bonjour,

j'ai rencontré un problème au niveau boucle do...while. En effet, au cours d' une exécution quand il y a du printf elle l'affiche deux fois successivement

void main(){
char r;
int pos,i;
carnet c;
personne p;
char ch[32];
c.n=0;

do{
printf("\nMenu :\n [A] : Ajouter une personne au Carnet\n [D] : Supprimer une personne au Carnet\n [V] : Affichage du carnet\n [S] : Recherche d’une personne dans au Carnet \n [T] : Trier les personne dans un carnet par ordre alphabétique \n [Q] : Quitter\n");
printf("votre reponse : ");
scanf("%c",&r);
if(r=='A'){
    p=creer();
    c=add(c,p); }
/*else if(r=='D'){
    printf("donner la position de personne a supprime");
    scanf("%d",&pos);
    c=Del(c,pos);}*/
else if(r=='V'){
    afficheC(c);}
else if(r=='S'){
    printf("tapez le nom a cherche");
    scanf("%s",ch);
    if(recherche(c,ch)==0){printf("\n numero introuvable");}
    else printf("\nce numero se trouve dans la position %d",recherche(c,ch));}
/*else if(r=='T'){
    trier(c);}*/
}while(r!='Q');
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

yg_be Messages postés 23295 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 octobre 2024 Ambassadeur 1 548
25 mars 2018 à 19:59
bonsoir, ton code contient quatre printf: peux-tu expliquer exactement ce qui est affiché, et dans quel ordre?
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
25 mars 2018 à 20:15
Bonjour,

Pour entrer un caractère, on doit saisir ce caractère puis taper un retour chariot. Le programme reçoit alors 2 caractères avec en second le retour chariot. Il faut donc 2
scanf("%c")
pour extraire ce qui a été saisi.
Il faut éviter
scanf("%c",&r)
, on peut faire
fgets(ligne,sizeof(ligne),stdin); r = ligne[0];
.
On peut aussi écrire
scanf(" %c ",&r);
qui marche dans des cas simples (l'espace dans la chaîne de format permet d'ignorer les caractères espaces, tabulations, retours chariots,...)
0