C#项目switch-case输入匹配错误及菜单1-9范围异常处理咨询
问题产生原因
该异常本质是输入处理逻辑错误,具体根源如下:
- 你当前使用了单个字符读取逻辑处理控制台输入,并未读取用户输入的完整内容:输入
10时仅取到第一个字符'1',49正是ASCII编码中字符'1'对应的十进制数值。 - 你的
switch-case分支使用的是字符类型匹配(如case '1':)而非数值类型匹配,输入的任意长度内容只会按首位字符匹配对应分支,自然出现输入13匹配'1'、输入35匹配'3'的问题。
合法输入校验方案
实现逻辑
- 放弃单字符读取方案,改用
Console.ReadLine()读取用户输入的完整行,先移除首尾空白字符再校验。 - 限制输入长度必须为1位,长度不符合直接判定为非法输入。
- 仅接受
1-9的数字字符,以及x/X作为退出指令,其余字符均判定为非法。 - 非法输入给出明确提示后,循环要求用户重新输入,直到拿到合法值。
参考代码示例
char GetValidChoice() { char validChoice; while (true) { Console.WriteLine("请输入操作选项(1-9执行对应功能,x/X退出程序):"); string input = Console.ReadLine()?.Trim() ?? string.Empty; // 校验输入长度 if (input.Length != 1) { Console.WriteLine("输入非法:仅允许输入1位字符,请重新输入"); continue; } validChoice = input[0]; // 校验输入范围 if ((validChoice >= '1' && validChoice <= '9') || char.ToLower(validChoice) == 'x') { break; } Console.WriteLine("输入非法:仅允许输入1-9或x/X,请重新输入"); } return validChoice; }
拿到返回的合法字符后再执行switch-case分支即可,分支可以保持原有的case '1':/case 'x':格式,不会再出现错误匹配的问题。
内容的提问来源于stack exchange,提问作者Wenbo Peng
相关产品推荐
相关产品推荐

