Bonjour,
j'ai posté il y a un petit moment pour un problème de saisie au clavier.
Le problème était qu'il y avait à la fois des scanf et des fgets dans mon programme.
Suivant les conseils j'ai donc obtenu les deux fonctions :
- saisieChaine
1 2 3 4 5 6 7 8 9 10
| void saisieChaine(char *chaine, size_t size, FILE *file){
int saisie_OK = 0;
while (saisie_OK == 0){
fgets (chaine, size, file);
saisie_OK = !fclean (chaine, file);
if (saisie_OK==0){
fprintf (stderr, "Saisie trop longue, recommencez\n");
}
}
} |
et
- fclean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int fclean(char *chaine, FILE *file){
int erreur = 0;
if (chaine != NULL && file != NULL){
char *sautLigne = strchr(chaine, '\n');
//si la saisie n'a pas ete tronquee
if (sautLigne != NULL){
//on remplace '\n' par '\0'
*sautLigne = '\0';
}
//si la saisie a ete tronquee, on purge le flux d'entree
else{
int c;
while ((c = fgetc (file)) != '\n' && c != EOF);
erreur = 1;
}
}
return erreur;
} |
Cela marche très bien mon problème est plutôt de comprendre pourquoi ça ne marchait pas ^^.
Donc mes questions sont :
1) quel est le problème quand on utilise scanf et fgets dans un même programme (un problème de buffer si j'ai bien compris mais j'aimerais bien avoir des details).
2) a quoi sert a ligne :
while ((c = fgetc (file)) != '\n' && c != EOF);
A purger le flux d'entrée daccord mais quel est le problème si on ne la met pas ?
Merci d'avance pour vos réponses
Partager