fmt.Scanln-Fehler: Erwarteter Zeilenumbruch
Bei Verwendung der fmt.Scanln-Funktion in Go kann es zu einem „erwarteten Zeilenumbruch“-Fehler kommen . Dies tritt auf, wenn die Eingabe ein Zeilenumbruchzeichen vor dem erwarteten Trennzeichen (normalerweise ein Leerzeichen) enthält. Um dieses Problem zu beheben, untersuchen wir das Verhalten von fmt.Scan und fmt.Scanln.
fmt.Scan liest durch Leerzeichen getrennte Werte aus der Standardeingabe und behandelt Zeilenumbrüche als Leerzeichen. Diese Werte werden den entsprechenden Argumenten zugewiesen und die Anzahl der erfolgreich gescannten Elemente zurückgegeben.
fmt.Scanln verhält sich ähnlich, stoppt jedoch den Scanvorgang bei einer neuen Zeile. Entscheidend ist, dass die Eingabe mit einer neuen Zeile oder einem EOF endet, um erfolgreich abgeschlossen zu werden.
Um dies zu veranschaulichen, betrachten Sie die folgende Eingabe:
123 123.456 everybody loves ice cream
Bei Verwendung von fmt.Scan lautet die Ausgabe :
read 1 integer: 123 read 1 float64: 123.456 read 1 string: everybody Error: Scan: expected newline
fmt.Scan interpretiert „jeder liebt Eis“ als zwei Zeichenfolgen, was zu dem Fehler führt.
Wenn Sie jedoch fmt.Scanln für dieselbe Eingabe verwenden, wird die Ausgabe wird sein:
read 1 integer: 123 read 1 float64: 123.456 read 1 string: everybody loves ice cream
fmt.Scanln erkennt den Zeilenumbruch als Trennzeichen und analysiert die gesamte Zeile korrekt als einzelnes Zeichenfolgenargument.
Um eine Zeile einzulesen, die mit einem Zeilenumbruchzeichen endet Gehen Sie, Sie können bufio.Reader und seine ReadString-Methode verwenden:
line, err := buffer.ReadString('\n')
Das obige ist der detaillierte Inhalt vonWarum gibt fmt.Scanln von Go den Fehler „Erwarteter Zeilenumbruch' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!