2017-06-20 6 views
0

私はコンソール入力を読み、数式のための簡単なコードを書こうとしました。ここに私の最小限の実行例を示しますLuaコンソールから数値を読み込んだ後に、どのように単語を読むことができますか?

print("Please enter a number") 
local number = io.read("*n") 
print("You entered the number: " .. number) 
print("Please enter 'yes'") 
local word = io.read("*l") 
if word == "yes" then 
    print("Thank you!") 
else 
    print(":(") 
end 

私は1を入力し、押されたリターンは、その後、yesを入力してリターンを押したが、私は常にLuaのコンソールで次の出力を得る:

Please enter a number 
>> 1 
You entered the number: 1 
Please enter 'yes' 
:(

私はしないでくださいなぜ私はyesを入力することはできません理解する。プログラムはちょうど終了します。 どうすれば修正できますか?

+3

が続いていることを確認するにはビットカウンタ - 直感的なLuaのである(それはLFなしで数を読み込み、その後に)。すべての 'io.read(" * n ")'を 'io.read(" * n "、" * l ")'に置き換えて修正する –

答えて

1

Egor io.read("*n")で指摘されているように、その番号の後ろに改行がない数字が読み込まれます。

1と入力してio.read("*n")と入力すると、実際には入力ストリームに空の行が残ります。

io.read("*l")で新しい行を読み終えたら、Luaはその空行をストリームから読み込みます。そのため、あなたの入力を待つのではなく、ただちにwordの内容を評価します。

wordは空の文字列word == "yes"falseです。

io.read("*n", "*l")を使用して数字と次のemtpy行を読み取って修正できます。そうすれば、io.read( "* l")を次に呼び出すと入力ストリームが空になり、Luaはあなたの言葉を入力するのを待ちます。あなたが行うことができます

は、このコードを実行します。

print("Enter 1") 
local number, newLine = io.read("*n", "*L") 
print(number == 1) 
print(newLine == "\n") 

あなたの数が実際の数を読ん"\n"

関連する問題