Probleme dans la boucle do... while
Rahmaa
-
Dalfab Messages postés 638 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 638 Date d'inscription Statut Membre Dernière intervention -
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
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 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonsoir, ton code contient quatre printf: peux-tu expliquer exactement ce qui est affiché, et dans quel ordre? -
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 2scanf("%c")pour extraire ce qui a été saisi.
Il faut éviterscanf("%c",&r), on peut fairefgets(ligne,sizeof(ligne),stdin); r = ligne[0];
.
On peut aussi écrirescanf(" %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,...)