Frage

Ich habe den folgenden Code:

main = do
    putStr "Test input : "
    content <- getLine
    putStrLn content

Wenn ich es laufen (mit runhaskell) oder kompilieren (ghc 6.10.4) ist das Ergebnis wie folgt aus:

asd
Test input : asd

Warum ist Test input : asd Wesen nach asd gedruckt?

In dem Codebeispiel auf http://learnyouahaskell.com/ , die putStr verwendet, ist die getLine Ausgabe präsentiert ist anders als meine. Wenn ich das Programm funktioniert verwenden putStrLn wie erwartet (Print, dann prompt und Druck).

Ist es ein Fehler in ghc, oder es ist die Art und Weise, dass es funktionieren soll?

War es hilfreich?

Lösung

Das ist, weil GHCI deaktiviert Pufferung, während ein Programm mit ghc zusammengestellt Linie Pufferung standardmäßig hat. Sie können dies sehen dies durch Ausführen von:

import System.IO
main = print =<< hGetBuffering stdout

In GHCi Sie NoBuffering sehen, während mit runghc Sie LineBuffering bekommen. Da das Newline-Zeichen wird nicht gedruckt, bis nach der Benutzereingabe, die Aufforderung auch nicht.

Fix it von hFlush stdout nach der Aufforderung des Hinzufügen (oder deaktivieren Pufferung mit hSetBuffering stdout NoBuffering, aber das ist wahrscheinlich schlecht).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top