Partage
  • Partager sur Facebook
  • Partager sur Twitter

gets

22 mai 2017 à 20:25:24

Mon problème est que mon programme affiche : " Nom : " puis je suis censé pouvoir rentrer mon nom mais ça passe la ligne du gets pour afficher " Prenom : ", savez-vous m'aider ? Voici mon code :

printf("\nNom: ");
gets(ligneTab[j].nom);

printf("\nPrenom: ");
gets(ligneTab[j].prenom);



  • Partager sur Facebook
  • Partager sur Twitter
22 mai 2017 à 21:06:16

Lu'!

Cette fonction est tellement pourrie et dangereuse que le dernier standard C l'a carrément bannie. Voir du côté de fgets. N'utilises pas cette horreur, c'est la porte ouverte au buffer overflow immédiatement.

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

22 mai 2017 à 21:10:21

Bonsoir Ksass'Peuk,

Oui mais je dois bien stocker les données...

Bonsoir Matt22,

Ok j'ai compris que je ne dois pas utiliser gets mais pourquoi utiliser fgets alors, quel est son avantage et comment fonctionne-t-il ? Car fgets lit les caractère d'un fichier et non de ce que la personne tape sur le clavier  non ?

-
Edité par williamvh7 22 mai 2017 à 21:14:26

  • Partager sur Facebook
  • Partager sur Twitter
22 mai 2017 à 21:34:09

Hello,

WilliamVanHaute a écrit:

....fgets lit les caractère d'un fichier....

Exact, mais si le nom de fichier est stdin, alors fgets() lira l'entrée standard (qui est très souvent le clavier):
char str[MAXLEN];

fgets(str,sizeof(name),stdin);
Ceci mettra les caractères tapés au clavier (MAXLEN-1 caractères au maximum, et terminé par un \0) dans str.

-
Edité par edgarjacobs 22 mai 2017 à 21:35:20

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

22 mai 2017 à 21:42:39

Je t'avoue que j'ai pas trop compris... :/

Qu'est-ce que l'entrée standard ?

Et donc à la place de str je devrais mettre " ligneTab[j].nom " ?

En fait j'ai compris mais je ne vois pas par quoi je devrais remplacer les valeurs que tu m'as donnés ( par rapport à mon code )

Je viens d'essayer en faisant comme ça :

printf("\nNom: ");
fgets(ligneTab[j].nom,500,stdin);

printf("\nPrenom: ");
fgets(ligneTab[j].prenom,500,stdin);
printf("\nCode Postal de la ville : ");
scanf("%d",&ligneTab[j].CP_ville);
fflush(stdin);
Mais cela me fait toujours la même chose et cela ne m'affiche pas d'erreur...

-
Edité par williamvh7 23 mai 2017 à 15:33:09

  • Partager sur Facebook
  • Partager sur Twitter