Lire une chaine
jean-pool
-
Mimiste Messages postés 1159 Statut Membre -
Mimiste Messages postés 1159 Statut Membre -
Bonjour,
Voici mon programme :
*
*
*
*
*
*
*
*
*
*
Je veux remplacer un mot par un autre. Je demande a l'utilisateur quelle mot il veut changer.
Ensuite je fais un switch.
Mais lorsqu'il rentre dans le premier choix par exemple, il m'affiche" le mot 1 a changer" mais il me demande pas d'en rentrer un nouveau et il finit le programme. Pourtant la fonction LireChaine1 doit me demander d'en rentrer un nouveau.
Et c'est la même chose pour le choix 2.
Merci d'avance.
Voici mon programme :
*
*
*
int changer() {
int choix;
char word1[200];
char word[200];
printf("entrer choix 1 ou 2\n");
scanf("%d", &choix);
switch(choix) {
case 1 :
printf("le mot 1 a changer\n");
LireChaine1(word, 200);
break;
case 2 :
printf("le mot 2 a changer\n");
LireChaine1(word1, 200);
break;
}
return 0;
}
*
*
*
*
void LireChaine1(char chaine[], int size) {
fgets(chaine, size, stdin);
chaine[strlen(chaine) - 1] = '\0';
}
*
*
*
Je veux remplacer un mot par un autre. Je demande a l'utilisateur quelle mot il veut changer.
Ensuite je fais un switch.
Mais lorsqu'il rentre dans le premier choix par exemple, il m'affiche" le mot 1 a changer" mais il me demande pas d'en rentrer un nouveau et il finit le programme. Pourtant la fonction LireChaine1 doit me demander d'en rentrer un nouveau.
Et c'est la même chose pour le choix 2.
Merci d'avance.
A voir également:
- Lire une chaine
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire epub - Guide
- Lire fichier bin - Guide
- Lire iso - Guide
- Comment lire un message supprimé sur whatsapp - Guide
3 réponses
salut
la raison est simple, le buffer stdin n'est pas vide quand tu arrive a ton fgets alors il ne prend pas la peine de te demander de taper quelque chose, il récupère directement le contenu de stdin
après ton scanf, appel cette fonction par exemple pour vider le buffer
la raison est simple, le buffer stdin n'est pas vide quand tu arrive a ton fgets alors il ne prend pas la peine de te demander de taper quelque chose, il récupère directement le contenu de stdin
après ton scanf, appel cette fonction par exemple pour vider le buffer
void flushBuffer()
{
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}
D'accord avec toi, seulement tu peut le faire en une seule instruction qui est la suivant :
fflush(stdin);
Voila ;)
fflush(stdin);
Voila ;)
il ne faut pas prendre cette mauvaise habitude d'utiliser fflush(stdin), c'est une très mauvaise pratique.
En effet elle peut fonctionner mais le but de cette fonction est de vider un buffer de sortie et non pas un buffer d'entrée. C'est possible qu'elle ne fonctionne pas ou ai des comportements bizarre sur certains systèmes (elle ne fonctionnera pas sous mac par exemple). Alors autant bien commencer le C et directement utiliser quelque chose de portable et qui fonctionnera dans tous les cas ;)
En effet elle peut fonctionner mais le but de cette fonction est de vider un buffer de sortie et non pas un buffer d'entrée. C'est possible qu'elle ne fonctionne pas ou ai des comportements bizarre sur certains systèmes (elle ne fonctionnera pas sous mac par exemple). Alors autant bien commencer le C et directement utiliser quelque chose de portable et qui fonctionnera dans tous les cas ;)