Maison  >  Article  >  développement back-end  >  Pourquoi fmt.Scanln de Go génère-t-il une erreur « Nouvelle ligne attendue » ?

Pourquoi fmt.Scanln de Go génère-t-il une erreur « Nouvelle ligne attendue » ?

DDD
DDDoriginal
2024-10-24 04:27:31256parcourir

Why Does Go's fmt.Scanln Give an

Erreur fmt.Scanln : nouvelle ligne attendue

Lors de l'utilisation de la fonction fmt.Scanln dans Go, vous pouvez rencontrer une erreur de « nouvelle ligne attendue » . Cela se produit lorsque l'entrée contient un caractère de nouvelle ligne avant le délimiteur attendu (généralement un espace). Pour résoudre ce problème, examinons le comportement de fmt.Scan et fmt.Scanln.

fmt.Scan lit les valeurs séparées par des espaces à partir de l'entrée standard, en traitant les nouvelles lignes comme des espaces. Il attribue ces valeurs aux arguments correspondants, renvoyant le nombre d'éléments analysés avec succès.

fmt.Scanln se comporte de la même manière mais arrête l'analyse à une nouvelle ligne. Il est essentiel que l'entrée se termine par une nouvelle ligne ou un EOF pour se terminer avec succès.

Pour illustrer cela, considérons l'entrée suivante :

123
123.456
everybody loves ice cream

Lors de l'utilisation de fmt.Scan, la sortie sera :

read 1 integer:  123
read 1 float64:  123.456
read 1 string:  everybody
Error:  Scan: expected newline

fmt.Scan interprète "tout le monde aime la glace" comme deux chaînes, ce qui entraîne l'erreur.

Cependant, si vous utilisez fmt.Scanln pour la même entrée, la sortie sera :

read 1 integer:  123
read 1 float64:  123.456
read 1 string:  everybody loves ice cream

fmt.Scanln reconnaît la nouvelle ligne comme délimiteur et analyse correctement la ligne entière comme un argument de chaîne unique.

Pour lire une ligne qui se termine par un caractère de nouvelle ligne dans Allez, vous pouvez utiliser bufio.Reader et sa méthode ReadString :

line, err := buffer.ReadString('\n')

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn