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
etCode:
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"); } } }
- fclean
Cela marche très bien mon problème est plutôt de comprendre pourquoi ça ne marchait pas ^^.Code:
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; }
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 :
A purger le flux d'entrée daccord mais quel est le problème si on ne la met pas ?Code:while ((c = fgetc (file)) != '\n' && c != EOF);
Merci d'avance pour vos réponses ;)