1. ホーム
  2. python

[解決済み] sys.stdin.readline() はプロンプトなしで読み、「間に何もない」を返します。

2022-02-15 18:04:09

質問

以下を実行する関数があるのですが、(中略)。

userinput = stdin.readline()
betAmount = int(userinput)

標準入力から文字列として整数を受け取り、それを整数に変換することになっています。

しかし、この関数を呼び出すと、1つの改行文字が返されます(私が何かを入力するのを待つことさえしません)。

プログラムの最初のほうで、私は次のような形で入力を得ました。

stdin.read(1)

で1文字をキャプチャします。

これは何か関係があるのでしょうか?私は何らかの方法で、stdinの次の行に改行文字を書き込んでいるのでしょうか?

どうすれば直るのでしょうか?

解決方法は?

stdin.read(1) から1文字読み取る。 stdin . その時点で読み込むべき文字が複数あった場合 (たとえば、読み込んだ 1 文字の後に改行があった場合)、その文字または文字はまだバッファの中に残っていて、次の read() または readline() .

例として rd.py :

from sys import stdin

x = stdin.read(1)
userinput = stdin.readline()
betAmount = int(userinput)
print ("x=",x)
print ("userinput=",userinput)
print ("betAmount=",betAmount)

... このスクリプトを次のように実行すると (私が入力したのは 234 ):

C:\>python rd.py
234
x= 2
userinput= 34

betAmount= 34

...だから 2 が最初にピックアップされ 34 と末尾の改行文字を拾うために readline() .

この問題を解決するには readline() ではなく read() を、ほとんどの状況で使用することができます。