Ich lerne Go.
Mein Programm sollte Daten von stdin lesen, bis ich eine Zeile mit einer einzigen Periode eintrage.
%Vor%Wie sollte ich meine for-Schleife ändern, um das Programm zu stoppen, wenn ich einen einzelnen Punkt eingebe?
Ich habe versucht, eine while-Schleife mit der for-Anweisung zu implementieren, stimmt etwas nicht mit meiner Vorgehensweise, ist die Bedingung falsch oder verwirft ReadString meine Daten?
... ist ReadString mit meinen Daten unordentlich?
Nein, ist es nicht. Es liest bis zum nächsten '\n'
. Das bedeutet, dass eine Zeile mit nur einem Punkt die Daten ".\n"
oder ".\r\n"
abhängig vom Betriebssystem hat.
Um Zeilenenden zu entfernen, würde ich input = strings.TrimRight(input, "\r\n")
Nur für den Fall, dass irgendjemand anderem diese Frage stellt:
Seit Go 1.1 gibt es eine viel schönere Möglichkeit, die Zeilen einiger verfügbarer Eingaben zu durchlaufen. So würde ich heute das Problem von OP angehen:
%Vor% scanner.Text()
entfernt automatisch den abschließenden Zeilenumbruch.
Das wichtigste Problem bei Verwendung einer beliebigen bufio-Hilfsfunktion besteht darin, dass es möglicherweise mehr Daten über das Stoppzeichen '\n'
hinaus liest. Es liest alle verfügbaren Eingaben bis zur Größe des Puffers. Im Falle eines gleichzeitigen Zugriffs auf os.Stdin kann der nächste Leser einige Eingaben übersehen, die zuvor von bufio gelesen wurden. Unten ist mein nicht gepufferter "Entwurf" -Code, um eine gleichzeitig sichere Methode zum Lesen aller Zeichen aus dem Eingabestrom bis zu CR ('\n')
char. Zu skizzieren.
Tags und Links go