Scanf démythifiée...j'ai quand même une question !
Bonjour,
J'ai lu la documentation à propos de la bonne utilisation de la fonction scanf. J'en suis content car elle pousse la réfléxion sur cette fonction un peu plus loin que le livre "Langage C" de C. Delannoy; du moins sur l'emploi de %[...]. C'est justement à ce propos que je viens demander votre aide.
Si j'ai bien compris, pour vider le flux avec un la fonction scanf il suffit de taper ceci:
Code:
1 2
| scanf("%*[^\n]");
getchar(); |
Alors, je me dis que ceci peut faire le même boulot:
Code:
scanf("%*[^\n]%*c");
Hélàs, ça ne fonctionne pas très bien !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#include <stdio.h>
main ()
/*---------*/
{
int nbre;
printf("Entrez un nombre de 3 chiffres: ");
scanf("%3d[0-9]", &nbre);
scanf("%*[^\n]%*c");
//getchar();
printf("Nombre lu: %d\n",nbre);
printf("Entrez un caractere: ");
getchar();
} // fin main |
Si j'entre "123", alors il reste encore le '\n' (je crois ?) dans le buffer et le programme se termine sans que je puisse entrer un caractère.
Si j'entre "1234", alors pas de problème. Le buffer semble être vidé après le second scanf. J'imagine qu'il restait '4' et '\n' donc forcément.
Mais alors, que reste-t-il dans le buffer avec "123" ? Est-ce le '\0' ajouté par l'utilisation des "[" (si j'ai bien lu) ?
Quelques intérrogations sur le scanf le mal aimé ;-)
Merci d'avance et bonne soirée à tous
++
Re: Scanf démythifiée...j'ai quand même une question !
Citation:
Envoyé par weiouch
Code:
scanf("%*[^\n]%*c");
Je me contente de fgets(), maintenant, je sais pourquoi !