Langage C probleme boucle
jeremy08
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je dois faire un petit programme en devoir et le probleme c'est que ma boucle while ne fonctionne pas normalement quand je saisi un pays avec ses medailles le programme devrais me redemander " voulez vous resaisir un pays mais la non le programme s'arrete pourtant quand je met des system("pause") il me redemande bien de retaper un pays mais après apreil il s'arrete pourquoi ????? svp merci
je dois faire un petit programme en devoir et le probleme c'est que ma boucle while ne fonctionne pas normalement quand je saisi un pays avec ses medailles le programme devrais me redemander " voulez vous resaisir un pays mais la non le programme s'arrete pourtant quand je met des system("pause") il me redemande bien de retaper un pays mais après apreil il s'arrete pourquoi ????? svp merci
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> typedef struct tpays { char nom[30]; int bronze; int argent; int orr; }; void saisie(int y, tpays tableau[100]) { printf("saisir le nom du pays\n"); scanf("%s",&tableau[y].nom); printf("saisir le nombre de medaille de bronze\n"); scanf("%d",&tableau[y].bronze); printf("saisir le nombre de medaille d'argent\n"); scanf("%d",&tableau[y].argent); printf("saisir le nombre de medaille d'or\n"); scanf("%d",&tableau[y].orr); } /* void affichage(int lim, tpays tableau[100]) { int i; for(i=1;i<lim;i++) { printf("%s - %d - %d - %d", tableau[i].nom, tableau[i].orr, tableau[i].argent, tableau[i].bronze); } } void participant(int i, int lim, tpays tableau[100]) { } void tri() { } */ main() { tpays tableau [100]; int lim,i; lim=1; i=1; char rep; printf("Voulez vous saisir un pays ? \n"); scanf("%c",&rep); while ( rep=='o' && lim<=100) { saisie(i, tableau); printf("Voulez vous resaisir un pays ?"); scanf("%c",&rep); i=i+1; lim=lim+1; } // affichage(lim, tableau); }
A voir également:
- Langage C probleme boucle
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Boucle excel sans macro - Forum Excel
1 réponse
Lorsque tu entres 'o' dans ton scanf tu appuies ensuite sur la touche entrée, donc en fait c'est comme si tu avais entré 'o\n' du coup ça se passe bien pour le premier tour de boucle car rep=='o' mais après tu vas avoir rep=='\n' et donc quitter ta boucle while.
Tu vas avoir le même problème si tu au lieu d'entrer 'o' tu tapes "oui", tu vas avoir 'o', puis 'u', puis 'i' puis '\n'
Pour s'en sortir tu pourrais faire un scanf("%s",char* ligne) et faire rep=ligne[0], tu auras alors uniquement le premier caractère de ta ligne, pas la suite...
Tu vas avoir le même problème si tu au lieu d'entrer 'o' tu tapes "oui", tu vas avoir 'o', puis 'u', puis 'i' puis '\n'
Pour s'en sortir tu pourrais faire un scanf("%s",char* ligne) et faire rep=ligne[0], tu auras alors uniquement le premier caractère de ta ligne, pas la suite...
Oui. Mais le problème est que les autres caractères seront stockés dans le buffer clavier. Et c'est ce même buffer qu'interrogera les fonctions lecture (getchar, scanf, ...) au prochain tour.
Le mieux est de faire une fonction spécifique pour vider le buffer clavier. Mais, ici un simple getchar suffira (à condition de ne pas taper "oui" au lieu de "o").
Cdlt,
Une exécution possible est celle-ci :
Dans ce code je récupère bien un caractère à la fois, mais ma boucle va tous les récupérer les uns à la suite des autres, y compris le \n (ASCII=10)
Dans ton code c'est pareil, tu vas demander un caractère et tu vas bien récupérer 'o' la première fois, mais lors du deuxième scanf tu vas récupérer le reste de la ligne, par exemple le '\n' et c'est pour ça que ta boucle while s'interrompt. parce que rep!='o'