Swift人机投注循环:用户输入无法暂停循环的正确解决方法
Swift 命令行投注循环的正确实现
首先明确:在本地Swift命令行环境中,readLine()本身就会阻塞当前线程,等待用户输入完成后才会继续执行后续代码。你遇到的循环未暂停问题,大概率是运行环境不支持交互输入(比如部分在线编译器、非交互模式的控制台)。如果是本地终端运行,以下是优化后的正确代码:
let steps = [1, 2, 3, 4, 5] var x = 1 while x < 35 { for step in steps { switch step { case 1, 2, 3, 5: x += 1 print("自动累加后x的值: \(x)") case 4: print("请输入要累加的金额:") // readLine()会阻塞等待用户输入,直到用户回车 if let input = readLine(), let increment = Int(input) { x += increment print("用户输入累加后x的值: \(x)") } else { print("输入无效,请输入整数") // 输入无效时停在当前步骤,重新要求输入 continue } default: break } // 每次步骤后检查终止条件,提前退出循环 if x >= 35 { break } } } print("投注循环结束,最终x的值: \(x)")
关键说明:
readLine()的阻塞特性:本地终端运行时,调用readLine()会暂停当前线程,等待用户输入并按下回车,输入完成后才会继续执行后续代码,不需要额外创建线程或信号量实现暂停。- 代码优化:用
switch替代多个if判断,逻辑更清晰;输入无效时用continue回到当前步骤,重新获取输入;每次步骤后检查终止条件,避免不必要的循环。 - 环境排查:如果仍未暂停,确保在支持交互的环境中运行——打开本地终端,用
swift run命令执行程序,不要使用不支持交互的在线编辑器或IDE控制台。
内容的提问来源于stack exchange,提问作者Andrew Wertheim
相关产品推荐
相关产品推荐

