/* -------------------------------------------------- */ /* Jouons avec les caractères en C par LG le 4/10/2004*/ /*------------------- Version "scanf" ----------------*/ /* -------------------------------------------------- */ #include void essai1(void) { char rep = 'o'; int cpt=1; while (rep=='o') { printf(" Numéro de Boucle : %d\n",cpt); printf(" Voulez-vous continuer ? (o/n)\n"); scanf("%c",&rep); cpt = cpt+1; } printf("Fin de la boucle\n\n"); } /*marche si o puis entree, n puis entree*/ void solu1(void) { char rep = 'o'; char viderbuffer; int cpt=1; /*c'est o pour oui, et nimp d'autre pour non*/ while (rep=='o') { printf(" Numéro de Boucle : %d\n",cpt); printf(" Voulez-vous continuer ? (o/n)\n"); scanf("%c",&rep); scanf("%c",&viderbuffer); cpt = cpt+1; } printf("Fin de la boucle\n\n"); } int main(void) { printf("Essai numéro1\n"); essai1(); /* conclusion, un scanf avec %c est à manier avec précaution, */ /* le %d mange les blancs, pas le %c. */ solu1(); /*si on met oooooo, plein de boucles */ /*le scanf "garde en memeoire " les trucs deja scannes*/ return 0; } /* -------------------------------------------------- */ /*solution au probleme du scanf, version1*/ /*LG le 8/10/2004*/ /* -------------------------------------------------- */ #include void vider_ligne (void) { char buf; do { scanf("%c", &buf); } while (buf != '\n'); } char prend_premier_non_vide_et_vide_ligne(void) { char rep; do { scanf("%c",&rep); } while((rep == ' ') || (rep == '\n')); vider_ligne(); return(rep); } char get_reponse(void) { char rep; do { rep = prend_premier_non_vide_et_vide_ligne(); } while (rep != 'o' && rep != 'n'); return rep; } int main(void) { int cpt=1; char rep; do { printf(" Numero de Boucle : %d\n",cpt); printf(" Voulez-vous continuer ? (o/n)\n"); rep = get_reponse(); cpt = cpt+1; } while (rep == 'o'); printf("Fin de la boucle\n\n"); return 0; } /* -------------------------------------------------- */ /*solution 2 au probleme des caracteres*/ /*LG le 8/10/2004*/ /* -------------------------------------------------- */ #include char prend_premier(void) { char rep[512]; scanf("%s",&rep); return(rep[0]); } char get_reponse(void) { char rep; do { rep = prend_premier(); } while (rep != 'o' && rep != 'n'); return rep; } int main(void) { int cpt=1; char rep; do { printf(" Numero de Boucle : %d\n",cpt); printf(" Voulez-vous continuer ? (o/n)\n"); rep = get_reponse(); cpt = cpt+1; } while (rep == 'o'); printf("Fin de la boucle\n\n"); return 0; }