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 :
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(); 
}
Les deux printf successif m'affichent de résultats différents (le premier me donne la bonne chaine et pas le suivant).

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 !