Se que scanf("%[^\n]",phrase) ; veux dire ??
Résolu
informatique_c
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
salut,
bon je veux savoir se que :
scanf("%[^\n]",&chaine) ;
scanf("%d%*[^\n]", &chaine);
veulent dire exactement (je connais leurs fonctionnalité ) se que je veux savoir c se que :
^
\n
[]
%
*
veulent dire dans ces lignes
mrc de me rependre...
bon je veux savoir se que :
scanf("%[^\n]",&chaine) ;
scanf("%d%*[^\n]", &chaine);
veulent dire exactement (je connais leurs fonctionnalité ) se que je veux savoir c se que :
^
\n
[]
%
*
veulent dire dans ces lignes
mrc de me rependre...
A voir également:
- Scanf [^\n]
- Scanf java ✓ - Forum C
- "Scanf(&s,&n)" ✓ - Forum C
- Scanf windows - Guide
- Scanf segmentation fault ✓ - Forum Programmation
- Buffer scanf - Forum C
2 réponses
Bonjour,
scanf("%[^\n]",&chaine);
Le scanf stockera dans chaine tous les caractères jusqu'à ce que l'utilisateur appuie sur la touche entrée (\n). Cela permet notamment de récupérer des phrases (avec des espaces) contrairement à scanf("%s", ...);
Note : il faut mettre chaine, et non chaine (pas besoin de & pour les chaînes de caractères).
scanf("%d%*[^\n]", &chaine);
Le scanf stockera le nom en décimal signé dans chaine, puis ignorera tous les caractères situés après jusqu'à ce que l'utilisateur appuie sur la touche entrée (\n). Cela permet notamment de vider le buffer clavier.
Cdlt,
scanf("%[^\n]",&chaine);
Le scanf stockera dans chaine tous les caractères jusqu'à ce que l'utilisateur appuie sur la touche entrée (\n). Cela permet notamment de récupérer des phrases (avec des espaces) contrairement à scanf("%s", ...);
Note : il faut mettre chaine, et non chaine (pas besoin de & pour les chaînes de caractères).
scanf("%d%*[^\n]", &chaine);
Le scanf stockera le nom en décimal signé dans chaine, puis ignorera tous les caractères situés après jusqu'à ce que l'utilisateur appuie sur la touche entrée (\n). Cela permet notamment de vider le buffer clavier.
Cdlt,
Bonsoir,
Des explications par exemple sur la page https://xrenault.developpez.com/tutoriels/c/scanf/
Et dans un tutoriel sur les expressions régulières (ou rationnelles): la séquence [] introduit une expression régulière.
Sauf erreur toujours possible (je n'ai pas pratiqué depuis très longtemps):
- scanf("%[^\n]",&chaine) ; récupère dans chaine tous les caractères jusqu'au premier new line (non inclus)
-scanf("%d%*[^\n]", &chaine); recherche d'abord un nombre (%d), l'ignore (%*) puis prend tous les caractères jusqu'au premier new line (non inclus).
Des explications par exemple sur la page https://xrenault.developpez.com/tutoriels/c/scanf/
Et dans un tutoriel sur les expressions régulières (ou rationnelles): la séquence [] introduit une expression régulière.
Sauf erreur toujours possible (je n'ai pas pratiqué depuis très longtemps):
- scanf("%[^\n]",&chaine) ; récupère dans chaine tous les caractères jusqu'au premier new line (non inclus)
-scanf("%d%*[^\n]", &chaine); recherche d'abord un nombre (%d), l'ignore (%*) puis prend tous les caractères jusqu'au premier new line (non inclus).
Il faut l'éliminer avant le prochain scanf().
Tu peux donc faire un getchar() juste avant.
Ou alors si tu veux cumuler le scanf() : scanf("%[^\n]%*c", chaine);
D'ailleurs, j'en profite pour rappeler que scanf() est dangereux comme fonction et qu'il faut à tout prix indiquer la taille de la chaîne pour éviter les désagréments.
Donc, ça serait même mieux de faire :
<code c>char toto[16]; scanf("%15[^\n]%*c", chaine)</code c>
D'ailleurs pour vider, le buffer c'est même mieux de se faire une fonction (boucle while jusqu'à trouver le '\n' ou EOF).
Un petit lien : http://fiddy.free.fr/blog/index.php?post/2008/11/22/Le-C%2C-pas-si-facile-que-%C3%A7a
Cdlt,