Bonjour,
j'ai déjà posté il y a un une semaine. J'avais des soucis de saisie au clavier à cause des scanf.
J'ai tout remplacé par des fgets et j'ai crée une fonction "saisieChaine" qui renvoie une chaine saisie au clavier en supprimant le saut de ligne (en m'inspirant fortement de ce que j'ai trouvé sur le forum).
Je n'ai pas utilisé fclean car le seul lien que j'ai trouvé dans les archives est mort .
Je pensais que la fonction que j'avais là était équivalente à fclean mais j'ai du me tromper quelquepart.
Voici le code :
Les deux printf successif m'affichent de résultats différents (le premier me donne la bonne chaine et pas le suivant).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 #include<stdio.h> #include<stdlib.h> #include<string.h> #define NMAX 100 char* saisieChaine(); void vider_stdin(void); main(){ int nbPays,i,j; char *nomsPays[NMAX]; // Saisie des pays do{ printf("Nombre de pays : "); nbPays=atoi(saisieChaine()); //Convertit la chaine entree au clavier en entier }while(nbPays<2 || nbPays>NMAX); printf("Entrez le nom des pays :\n"); for(i=0;i<nbPays;i++){ printf("- "); nomsPays[i]=saisieChaine(); printf("nomsPays[%d]=%s\n",i,nomsPays[i]); printf("nomsPays[%d]=%s\n",i,nomsPays[i]); } } char* saisieChaine(){ char *pc; //Supprime le saut de ligne char chaine[100]; int saisie_OK = 0; while (saisie_OK == 0){ fflush(stdout); fgets(chaine, sizeof chaine, stdin); if ((pc = strchr(chaine, '\n')) != NULL){ *pc = '\0'; saisie_OK = 1; } else{ fprintf(stderr, "Saisie trop longue, recommencez\n"); vider_stdin(); } } return chaine; } void vider_stdin(void){ scanf("%*[^\n]"); getchar(); }
Si vous pouvez me dire ce qui cloche et pourquoi a m'aiderais beaucoup ^^
(évitez de juste me dire d'utiliser fclean puisque je n'arrive pas à trouver l'éxplication claire de cette fonction et que ce que j'ai essayé d'adapter ne marche pas, je serais toujours aussi perdu).
Merci d'avance !![]()
Partager