0

ocaml で read_int 関数を実装すると (以下を参照)、

let read_int () = Scanf.bscanf Scanf.Scanning.stdin "%d" (fun x -> x)

format 引数が%d(no space) の場合、コンパイラは次の情報とともに失敗を返します。

Exception:
Scanf.Scan_failure
"scanf: bad input at char number 1: ``character '\\n' is not a decimal digit''".

' '%dしかし、 (スペース付きのプレフィックス)を使用すれば問題ありませんが、なぜ%d間違っているのでしょうか? %dとはどう違い' '%dますか?. ありがとう。

4

1 に答える 1

3

scanf形式は"%d"、10 進数の文字列と一致します。これには空白は含まれません。scanfフォーマット文字列では、スペース ( )" "は任意の量の空白 (スペース、タブ、改行) を表します。

プログラムの標準入力に何が表示されるかわからないため、他に何が起こっているのかを正確に伝えることは実際には不可能です。おそらく問題は'\n'、前の行の最後に表示される です。

更新:価値があるのは、私はずっと前に(私のCプログラミング時代に)scanf解決するよりも多くの問題を引き起こすと決めました。入力行の処理が特に苦手です。別の方法で入力を行に分割し、結果の文字列に対してsscanf(または) を使用することをお勧めします。int_of_string

于 2013-03-07T05:54:54.547 に答える