Attente fmt.Scanln
Lors de l'utilisation de fmt.Scanln dans Go, on peut rencontrer l'erreur : "fmt.Scanln attendu une nouvelle ligne." Comprendre cette erreur et ses implications est crucial pour le débogage et l'écriture d'un code robuste.
Comportement de fmt.Scan par rapport à 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 caractères d'espacement. Cela signifie qu'il continuera à analyser les entrées jusqu'à ce que tous les arguments soient remplis ou qu'une erreur se produise. D'un autre côté, fmt.Scanln lit également à partir de l'entrée standard mais attend un caractère de nouvelle ligne comme point de terminaison. Toute entrée ultérieure ne sera pas analysée.
Exemple
Dans le code Go fourni, le problème survient lors de l'utilisation de fmt.Scanln pour lire une chaîne s. L'entrée inclut un caractère de nouvelle ligne, qui déclenche la fin de l'entrée pour fmt.Scanln. Cependant, les caractères d'entrée suivants "tout le monde aime la glace" sont toujours présents et sont consommés par le fmt.Scan suivant. Cela provoque l'erreur, car fmt.Scan attend une nouvelle ligne à la fin de la saisie.
Alternatives
Pour lire une ligne de texte comprenant des espaces et se terminant par une nouvelle ligne , pensez à utiliser la méthode ReadString de bufio.Reader :
<code class="go">import "bufio" func main() { reader := bufio.NewReader(os.Stdin) line, err := reader.ReadString('\n') }</code>
Conclusion
Comprendre les comportements distincts de fmt.Scan et fmt.Scanln est important pour éviter les erreurs et écrire un code qui correspond aux attentes. Lors de la lecture d'une ligne de texte, des alternatives comme bufio.Reader et ReadString fournissent des solutions plus explicites et efficaces.
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!