16

ユーザーがキーボードから入力した浮動小数点数を受け取り、それを処理するプログラムを作成しようとしています。

ただし、入力された文字列を解析して Float にしようとするたびに、エラーが発生し続けます。私が試したすべての方法では、ユーザーが入力したデータを取得して、必要な Float に変換することができませんでした。

私の練習プログラム(解決しようとしている実際の問題ではありません)は次のとおりです。

main = do
    putStrLn "Please input a number."
    inputjar <- getLine
    read :: read a => String -> a
    putStrLn( read inputjar :: Int)

編集

さらに質問です。

入力された文字列を取得して、計算で使用できるものに変換するにはどうすればよいですか?

たとえば、次のようなことができるように、入力された文字列を取得するにはどうすればよいですか。

(var + var) / 2
4

5 に答える 5

10
main = do
   putStrLn "Please input a number."
   inputjar <- readLn
   print (inputjar :: Int)

これは、文字列を読み取っているものを次のようにすぐに修正するため、より良い方法です。

main = do
   putStrLn "Please input a number."
   inputjar :: Int  <- readLn
   print inputjar

しかし、それは必要です{-#LANGUAGE ScopedTypeVariables#-}

于 2012-07-14T06:19:33.397 に答える
5

あなた(read inputjar :: Int)はあなたのコードで言っていますが、あなたが読みたいと言っていますFloat. を定義していませんread。その行を削除してください。putStrLnフロートを出力できるように使用しますputStrLnが、 を使用するため、値Stringが必要です。show

main = do
    putStrLn "Please input a number."
    inputjar <- getLine
    putStrLn $ show (read inputjar :: Float)
于 2012-07-14T05:44:48.437 に答える
5

putStrLnStrings ではなくs を出力するIntため、2 つの解決策があります。

printを実装するものを出力する を使用しShowます。

main = do
    putStrLn "Please input a number."
    inputjar <- getLine
    let n = read inputjar :: Int
    print n

.. または、読んだputStrLnオリジナルを呼び出すString

main = do
    putStrLn "Please input a number."
    inputjar <- getLine
    let n = read inputjar :: Int
    putStrLn inputjar

後者の例では n は使用されていませんが、実際にそれを使用するコードをその後に書くことになるでしょう。

于 2012-07-14T13:47:18.890 に答える
3

まあ、私は推測します

read :: read a => String -> a

間違っているだけですか?

とにかく、ghciの下で、:t putStrLnショー:

putStrLn :: String -> IO ()

そのため、最初のパラメーターとして文字列のみを受け入れるため、本当にputStrLnしたい場合:

putStrLn( show (read inputjar :: Int))

ところで、read inputjar :: int正しいですが、あなたの出力だけが間違っています。

于 2012-07-14T05:45:03.877 に答える
-4

これは私のために働いた

import System.IO

getNum :: IO Integer 
getNum = readLn 

--call function like this
something <- getNum
--something is type Integer
于 2015-03-01T23:07:55.237 に答える