2017-06-20 1 views
0

Ich habe versucht, etwas einfachen Code für mathematische Gleichungen zu schreiben, Konsoleneingaben lesen. Hier ist meine minimal ausführbare Beispiel:Wie kann ich ein Wort lesen, nachdem ich eine Zahl von der Lua-Konsole gelesen habe?

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 

I 1, drückte Rückkehr eintrat, trat dann yes und drückte Rückkehr, aber ich bekomme immer die folgende Ausgabe in der Lua-Konsole:

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

ich nicht verstehe, warum ich nicht mal yes eingeben kann. Das Programm wird einfach beendet. Wie kann ich das beheben?

+3

eine Reihe Lese eine kontraintuitiv in Lua Bit (es liest eine Zahl ohne LF nach dieser Nummer). Ersetze alle 'io.read (" * n ")' mit 'io.read (" * n "," * l ")' um das Problem zu beheben –

Antwort

1

Wie von Egor io.read("*n") hingewiesen wird eine Zahl ohne den Zeilenvorschub nach dieser Nummer lesen. Wenn Sie also 1 eingeben und das mit io.read("*n") lesen, hinterlassen Sie tatsächlich eine leere Zeile im Eingabestream

Sobald Sie eine neue Zeile mit io.read("*l") lesen, liest Lua diese leere Zeile aus dem Stream. Daher wartet es nicht auf Ihre Eingabe, sondern wertet den Inhalt von word sofort aus.

Als word ist eine leere Zeichenfolge word == "yes" ist false.

Sie können das beheben, indem Sie io.read("*n", "*l") zum Lesen der Zahl und der folgenden leeren Zeile verwenden. Auf diese Weise ist der Eingabestream leer, wenn Sie io.read ("* l") als nächstes aufrufen und Lua darauf wartet, dass Sie Ihr Wort eingeben.

Sie können diesen Code ausführen kann:

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

Um zu sehen, dass Ihre Nummer in der Tat von einem "\n" folgt

Verwandte Themen