In meinem Lua-Programm möchte ich anhalten und den Benutzer um Bestätigung bitten, bevor ich mit einer Operation fortfahre. Ich bin mir nicht sicher, wie ich anhalten und auf Benutzereingaben warten soll. Wie kann es gemacht werden?Lua - Befehlszeileneingabe vom Benutzer erhalten?
Antwort
Werfen Sie einen Blick auf die io
Bibliothek, die standardmäßig Standard-Eingang als Standard-Eingabedatei hat:
local answer
repeat
io.write("continue with this operation (y/n)? ")
io.flush()
answer=io.read()
until answer=="y" or answer=="n"
Ich habe mit Code wie folgt gearbeitet. Ich werde dies in einer Art und Weise geben, es wird funktionieren:
io.write("continue with this operation (y/n)?")
answer=io.read()
if answer=="y" then
--(put what you want it to do if you say y here)
elseif answer=="n" then
--(put what you want to happen if you say n)
end
Ich benutze:
print("Continue (y/n)?")
re = io.read()
if re == "y" or "Y" then
(Insert stuff here)
elseif re == "n" or "N" then
print("Ok...")
end
try Folowing
m=io.read()
if m=="yes" then
(insert functions here)
end
print("Continue (y/n)?")
re = io.read()
if re == "y" or "Y" then
(Insert stuff here)
elseif re == "n" or "N" then
print("Ok...")
end
Code zu verwenden,
Aus dem Bit von Lua, die ich gemacht habe (nicht viel), werde ich sagen, dass die Verwendung von Groß- und Kleinbuchstaben redundant ist, wenn Sie string.sub verwenden.
print("Continue? (y/n)")
local re = io.read()
--[[Can you get string.sub from a local var?
If so, this works. I'm unfamiliar with io(game
lua uses GUI elements and keypresses in place of the CLI.]]
if re.sub == "y" then
--do stuff
if re.sub == "n" then
--do other stuff
end
Das sollte funktionieren.
wird 're' in die Funktion 'string' aufgelöst und ist immer ungleich 'y' oder 'n' '. Außerdem wird bei der Zeichenfolgenerkennung die Groß- und Kleinschreibung berücksichtigt. Im besten Fall kannst du 're: match (" [nN] ")' und 're: match (" [yY] ")' 'machen –
genial, danke –
Gibt 'io.read()' automatisch 'io.flush()' bei der Arbeit mit default stdin/out? –
@EgorSriptunun, könnte es, aber wir können nicht sicher sein. Ich glaube nicht, dass ANSI C etwas darüber sagt. – lhf