2

この単純なコンソール入力を 5 で試すと、結果は 53 と表示されます。

printfn "Enter no. of blocks: "
let nBlock = System.Console.Read()
printfn "entered value is %O" nBlock

インタラクティブで試してみましたが、それでも間違った結果が得られました。解決策はありますか?

4

2 に答える 2

10

次のようなものを試してください:

printfn "Enter no. of blocks: "
let nBlock = System.Console.ReadLine() |> System.Int32.Parse
printfn "entered value is %d" nBlock

説明:

あなたのコードは1文字だけを読み取ります.Leeがこれで述べたように、行を読み取り(リターンを押した後に終了します)、その文字列をintに解析します.

備考: 数値を確認したい場合は、TryParse を使用してこれを行うことができます。

printfn "Enter no. of blocks: "
let nBlock = 
   match System.Console.ReadLine() |> System.Int32.TryParse with
   | true, n -> n
   | false, _ -> -1
printfn "entered value is %d" nBlock

もちろん、エラー ケース (-1) を確認するか、オプションなどに変更する必要があります。

于 2012-06-18T11:14:19.060 に答える
8

System.Console.Read()を返すintため、入力文字 '5' の int 表現 (53) が含まれます。それを usingnBlockに戻すことができます。各文字は個別に返されるため、この記事で説明されているように、入力全体を処理するためにループにラップする必要があります。charConvert.ToChar

より良いアプローチは、おそらく を使用Console.ReadLine()して行全体を読み取り、それを に解析することintです。

于 2012-06-18T11:13:44.177 に答える