Je lis une liste de chiffres séparés par des espaces. Actuellement, la boucle s'arrête lorsque j'appuie sur Ctrl + Z. Je dois juste savoir comment modifier la boucle pour terminer lorsque je frappe Entrée ou si elle rencontre le caractère Newline ('\ n').
3 Réponses :
Il n'y a pas de manière directe, car Si vous souhaitez traiter des lignes, puis pouvez analyser le contenu d'une ligne, Autres langues (C ++, Java, etc.) Ou peut-être d'autres bibliothèques peuvent avoir des outils plus intelligents. Mais c était initialement construit comme une langue de bas niveau ... p> scanf code> et les amis ne sont qu'un l'analyseur em>. Tant que vous avez des valeurs séparées avec un nombre arbitraire de caractères em> espace em> (espace, onglet, retour, linefeed et vtab) et ce n'est pas ce que ces séparateurs sont,
scanf code> est bien. P>
fgets code> est le moyen d'aller. Malheureusement, vous ne pouvez pas numériser à plusieurs reprises d'une chaîne, mais vous pouvez créer des analyseurs de cordes de jolis avec
strtok code> ou meilleur
strcspn code> p> p>
while (scanf_s(" %d", &num) == 1) { Insert a space before the %d as it will make the scanf function disregard the input that was leftover from whatever was left in stdin and you won't need that getchar() anymore.
L'espace avant % code> ne provoque que la fonction de filtrer WhitSpace i> mais pas des caractères qui ne pouvaient pas précédemment être convertis, tels que
'a' code>. Mais la plupart des spécificateurs de format (sauf notamment
% c code> et
% [] code>) filtre Whiteespace de toute façon, il n'est donc pas nécessaire ici.
L'édition montre que vous tapez Entrez code> après chaque numéro. Mais la question pose comment se terminer lorsque le premier
entrer code> ou
'\ n' code> est trouvé.
Yup, c'est vrai que j'ai complètement mal interprété ... @ @eathervane est correct.
Comment puis-je arrêter d'entrer avec le personnage de Newline (?) P>
Rechercher le
'\ n' code> avec
getchar () code> avant
scanf ("% d", & num) code> comme
" % d " code> consomme discrètement un espace blanc de premier plan, y compris
'\ n' code>. p>
xxx pré> solution complète Père pour
float code>. p>
Une approche alternative utilise
fgets () code> puis paes la string em>. Cette bonne approche a des problèmes avec la gestion de longue date et échoue si la ligne em> d'entrée inclut un caractère Null inhabitique em>. P> blockquote>
Utilisez
fgets code> suivi de
sscanf code>.
Solution ici pour
float code>. La clé est de lire le potentiel d'espace blanc avant
scanf ("% d" ...) code> à la recherche d'un
'\ n' code>.