C#中while循环如何等待用户输入 加密货币模拟控制台应用问题
问题根源
你代码的死循环问题来自两个逻辑缺失:
- 循环内输出选项提示后,没有读取用户选择币种的输入逻辑,初始
input值为0,永远触发不了if (input == 1)的分支,自然不会走到Console.ReadLine()等待输入的逻辑,循环会一直无阻塞打印提示内容。 - 你之前试的
Console.ReadKey()只能读取单个字符,没办法支持多位数的购买数量输入,不符合需求。
修复后的完整代码
int input = 0; string inputst; int maxcoins = 100; while (maxcoins > 0) { // 先读取用户选择的币种编号 Console.WriteLine("Type a key number to show what you want to buy"); Console.WriteLine("Key Numbers: Monke Coin 1 | Buy None 00 |"); Console.WriteLine("You can buy " + maxcoins + " more coins this turn"); inputst = Console.ReadLine(); // 加输入合法性校验,避免用户输非数字报错 if (!int.TryParse(inputst, out input)) { Console.WriteLine("请输入合法的数字编号"); continue; } if (input == 1) { Console.WriteLine("How Much Monke Coin Do you want to buy? Enter number 0-" + maxcoins); inputst = Console.ReadLine(); int buyCount = 0; while (!int.TryParse(inputst, out buyCount) || buyCount < 0 || buyCount > maxcoins) { Console.WriteLine($"输入不合法,请输入0到{maxcoins}之间的数字"); inputst = Console.ReadLine(); } maxcoins -= buyCount; Console.WriteLine("剩余可购买额度:" + maxcoins); } // 匹配提示里的Buy None 00选项 else if (input == 00) { break; } else { Console.WriteLine("输入的编号不存在,请重新输入"); } }
主要改动说明
- 在输出选项提示后新增了
Console.ReadLine()读取用户选择的币种编号,让循环有等待输入的逻辑,不会空跑 - 用
int.TryParse代替Convert.ToInt32做输入转换,避免用户输入非数字内容导致程序崩溃 - 补充了购买数量的范围校验,确保用户输入的购买数量不会超过当前可买额度
- 补充了输入00直接结束购买的逻辑,匹配你提示里的选项
内容的提问来源于stack exchange,提问作者CT Vaughan
相关产品推荐
相关产品推荐

