0
votes

Comment puis-je arrêter d'entrer avec le personnage de Newline

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'). xxx


2 commentaires

Utilisez fgets suivi de sscanf .


Solution ici pour float . La clé est de lire le potentiel d'espace blanc avant scanf ("% d" ...) à la recherche d'un '\ n' .


3 Réponses :


1
votes

Il n'y a pas de manière directe, car scanf et les amis ne sont qu'un l'analyseur . Tant que vous avez des valeurs séparées avec un nombre arbitraire de caractères espace (espace, onglet, retour, linefeed et vtab) et ce n'est pas ce que ces séparateurs sont, scanf est bien.

Si vous souhaitez traiter des lignes, puis pouvez analyser le contenu d'une ligne, fgets 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 ou meilleur strcspn

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 ...


0 commentaires

0
votes
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.

3 commentaires

L'espace avant % ne provoque que la fonction de filtrer WhitSpace mais pas des caractères qui ne pouvaient pas précédemment être convertis, tels que 'a' . Mais la plupart des spécificateurs de format (sauf notamment % c et % [] ) filtre Whiteespace de toute façon, il n'est donc pas nécessaire ici.


L'édition montre que vous tapez Entrez après chaque numéro. Mais la question pose comment se terminer lorsque le premier entrer ou '\ n' est trouvé.


Yup, c'est vrai que j'ai complètement mal interprété ... @ @eathervane est correct.



1
votes

Comment puis-je arrêter d'entrer avec le personnage de Newline (?)

Rechercher le '\ n' avec getchar () avant scanf ("% d", & num) comme " % d " consomme discrètement un espace blanc de premier plan, y compris '\ n' . xxx

solution complète Père pour float .


Une approche alternative utilise fgets () puis paes la string . Cette bonne approche a des problèmes avec la gestion de longue date et échoue si la ligne d'entrée inclut un caractère Null inhabitique .


0 commentaires