In my lua program, i want to stop and ask user for confirmation before proceeding with an operation. I'm not sure how to stop and wait for user input, how can it be done?
Asked
Active
Viewed 7.7k times
6 Answers
32
local answer
repeat
io.write("continue with this operation (y/n)? ")
io.flush()
answer=io.read()
until answer=="y" or answer=="n"

lhf
- 70,581
- 9
- 108
- 149
-
Does `io.read()` impose automatic `io.flush()` when working with default stdin/out? – Egor Skriptunoff Jun 10 '15 at 12:40
-
@EgorSkriptunoff, it might, but we can't be sure. I don't think ANSI C says anything about this. – lhf Jun 10 '15 at 12:47
15
Take a look at the io
library, which by default has standard-input as the default input file:

Amber
- 507,862
- 82
- 626
- 550
10
I've worked with code like this. I will type this in a way it will work:
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

Scythe
- 101
- 1
- 2
1
I use:
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

dreamcrash
- 47,137
- 25
- 94
- 117

Speedturtle123
- 19
- 1
-
The conditionals there are wrong, eg `re == "y" or "Y"` should be `re == "y" or re == "Y"`. It's probably good to be aware that we can check `re:lower() == "y"` too. – PaulR Sep 23 '18 at 14:45
-1
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
From the bit of lua that I've done (not a lot), I'm going to say that using both uppercase and lowercase letters is redundant if you use string.sub.
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
That should work.
-
1`re.sub` will resolve to the function `string.sub` & always be unequal to `"y"` or `"n"`. Besides, string matching is case sensitive. At best you can do `re:match("[nN]")` and `re:match("[yY]")` – Demur Rumed Jan 14 '18 at 18:17