Ce problème est bien connu en C.
Il est pratiquement toujours rencontré ce fameux buffer.
Il y a une façon de faire qui permet de bien contrôler les entrées. Et ainsi d'éviter des problèmes avec le buffer.
La combinaison des fonctions fgets et sscanf : fgets (char * s, int size, FILE * stream) sscanf (const char * str, const char * format, ...)
On lit sur l'entrée standard et on place la chaîne dans une variable.
fgets(buffer, sizeof(buffer), stdin);
On scanne cette variable en fonction du résultat souhaité (si il doit être une chaîne, entier, caractère, ...).
Et on stocke celle ci dans la variable de destination.
sscanf(buffer, "%s", &vardest);
Je ne sais pas si c'est la meilleure façon de faire ...
Mais cela permet d'avoir un bon contrôle sur les dépassements de buffer etc ...
# fgets + sscanf
Posté par Sebastian . En réponse au message scanf didju.. Évalué à 3.
Ce problème est bien connu en C.
Il est pratiquement toujours rencontré ce fameux buffer.
Il y a une façon de faire qui permet de bien contrôler les entrées. Et ainsi d'éviter des problèmes avec le buffer.
La combinaison des fonctions fgets et sscanf :
fgets (char * s, int size, FILE * stream)
sscanf (const char * str, const char * format, ...)
On lit sur l'entrée standard et on place la chaîne dans une variable.
fgets(buffer, sizeof(buffer), stdin);
On scanne cette variable en fonction du résultat souhaité (si il doit être une chaîne, entier, caractère, ...).
Et on stocke celle ci dans la variable de destination.
sscanf(buffer, "%s", &vardest);
Je ne sais pas si c'est la meilleure façon de faire ...
Mais cela permet d'avoir un bon contrôle sur les dépassements de buffer etc ...