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:
Alors, je me dis que ceci peut faire le même boulot:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 scanf("%*[^\n]"); getchar();
Hélàs, ça ne fonctionne pas très bien !
Code : Sélectionner tout - Visualiser dans une fenêtre à part scanf("%*[^\n]%*c");
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.
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 #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 "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
++
Partager