Se que scanf("%[^\n]",phrase) ; veux dire ??
Résolu/Fermé
informatique_c
Messages postés
30
Date d'inscription
mardi 22 juillet 2014
Statut
Membre
Dernière intervention
17 mars 2016
-
10 sept. 2014 à 23:42
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 12 sept. 2014 à 13:36
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 12 sept. 2014 à 13:36
A voir également:
- Scanf [^\n]
- Scanf windows - Guide
- Scanf java ✓ - Forum C
- Sscanf -> char *chaine et char chaine[10] ✓ - Forum Programmation
- Scanf equivalent in c++ - Forum C++
- Problème avec scanf - Forum C
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
11 sept. 2014 à 10:37
11 sept. 2014 à 10:37
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,
Hillian Fellers
Messages postés
79
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
24 mai 2022
12
11 sept. 2014 à 00:04
11 sept. 2014 à 00:04
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).
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
11 sept. 2014 à 10:32
11 sept. 2014 à 10:32
Presque bon.
%* s'applique ici à [^\n] et non à %d.
%* s'applique ici à [^\n] et non à %d.
informatique_c
Messages postés
30
Date d'inscription
mardi 22 juillet 2014
Statut
Membre
Dernière intervention
17 mars 2016
1
12 sept. 2014 à 02:39
12 sept. 2014 à 02:39
mrc hillian fellers et mrc fiddy
12 sept. 2014 à 01:04
Modifié par informatique_c le 12/09/2014 à 02:41
12 sept. 2014 à 13:36
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,