Parce que "scanf" attend une entrée "formattée" et qu'il s'arrête à tout ce qui ne correspond pas au format, ce qui peut poser des pb
Exemple: tu veux faire saisir un nombre puis un texte
int i;
char txt[11];
printf("Entrez un nombre :" );
scanf("%d", &i);
printf("Entrez un texte (10 car max):" );
scanf("%s", txt); |
Il y a de grandes chances que tu n'arrives jamais à saisir ton texte. Pourquoi ? Parce que, quand tu tapes ton nombre, tu finis ta saisie par "return" (normal). Mais "scanf" extrait les chiffres du clavier et laisse le "return" qui n'est pas un chiffre. Et lors du "scanf" suivant, ben il lit le "return" qui est resté dans le clavier comme un gland. Tu peux évidemment mettre un "getchar()" juste après la saisie du nombre pour purger ce "return" mais si tu fais un programme pour d'autres personnes, avec "scanf" tu ne peux pas contrôler ce que les autres vont taper. Si l'utilisateur est neuneu, il peut taper "12xqsd" pour le nombre et là, t'es bien avancé.
Et il peut aussi entrer plus de 10 caractères dans la saisie du texte ce qui risque de te provoquer beaucoup de pb.
Avec "fgets" 1) tout ce qui entre est du texte que tu peux ensuite controler à ta façon et 2) il limite la saisie selon tes choix ce qui t'évite beaucoup de soucis
int i;
char txt[11];
char buf[1024];
printf("Entrez un nombre :" );
fgets(buf, 1024, stdin);
sscanf(buf, "%d", &i);
printf("Entrez un texte (10 car max):" );
fgets(txt, 11, stdin); |
C'est pas beaucoup de travail en plus...
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.