Haskell: Wie analysiert ein IO-input-string in eine Float - (oder Int oder was auch immer)?
Ich versuche, ein Programm, das dauert eine Float-Zahl, eingegeben durch den Benutzer über Tastatur und macht Sachen mit ihm.
Aber jedes mal, wenn ich versuche zu analysieren, die den eingegeben String in einen Float bekomme ich immer wieder Fehler. Jede einzelne Methode, die ich ausprobiert habe hat es versäumt, gestatten Sie mir zu nehmen Benutzer eingegebenen Daten und verwandeln Sie es in ein Schweben, das ist es, was ich brauche.
Mein Praxis-Programm (nicht das eigentliche problem, das ich zu lösen versuche):
main = do
putStrLn "Please input a number."
inputjar <- getLine
read :: read a => String -> a
putStrLn( read inputjar :: Int)
Bearbeiten
Eine weitere Frage stellen.
Wie nehme ich den eingegebenen string an und drehen Sie es in etwas, das ich verwenden kann für eine Berechnung?
Zum Beispiel, wie nehme ich den eingegebenen string, so dass ich etwas tun kann, wie:
(var + var) / 2
InformationsquelleAutor der Frage Philip Eloy | 2012-07-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein schöner Weg, da es sofort behebt, was wir Lesen den string als:
aber es erfordert
{ -#LANGUAGE ScopedTypeVariables#- }
InformationsquelleAutor der Antwort applicative
Sagen Sie
(read inputjar :: Int)
im code, aber du bist uns zu sagen, dass Sie Lesen möchtenFloat
. Sie sind nicht die Definitionread
haben, nehmen Sie das line out. Verwenden SieputStrLn
so dass Sie ausdrucken können das schwimmen, aberputStrLn
dauertString
sind, so müssen Sieshow
den Wert.InformationsquelleAutor der Antwort vivian
putStrLn
drucktString
s, nichtInt
s, so gibt es zwei Lösungen:Verwenden
print
der druckt alles, was implementiertShow
:.. oder rufen Sie
putStrLn
auf die ursprünglicheString
Lesen Sie inIm letzteren Beispiel ist n nie verwendet, aber vermutlich würden Sie code schreiben, nach dem, was würden Sie tatsächlich verwenden.
InformationsquelleAutor der Antwort Gabriel Gonzalez
Nun, ich denke, die
ist es, nur durch Fehler?
Sowieso, unter ghci,
:t putStrLn
zeigt:So
putStrLn
akzeptiert nur String als ersten parameter, so dass, wenn Sie wirklich wollen, zu:BTW
read inputjar :: int
korrekt ist, wird nur der Ausgang ist falsch.InformationsquelleAutor der Antwort Ziyao Wei
Dieser arbeitete für mich
InformationsquelleAutor der Antwort nkvnkv