C#字符串反转程序输入验证异常求助:非法输入后合法输入仍报错
解决输入验证后循环无法退出的问题
嘿,我来帮你搞定这个字符串反转程序的问题!你猜的没错,问题确实出在while循环和result变量的处理上,咱们一步步捋清楚:
问题根源
result变量只初始化一次:你在第一次输入后计算了result的值,但后续在while循环里输入新内容时,没有重新更新result。也就是说,哪怕你后来输入了合法内容,result还是保持第一次的false,导致循环一直触发错误提示,没法退出。- 验证逻辑不一致且循环内未重新验证:你在
if里用了正则表达式(还包含了连字符-),但else的循环里只判断旧的result和空字符串,既没统一验证规则,也没对新输入的内容做检查,自然没法正确识别合法输入。
修复后的代码
我把验证逻辑抽成了单独的方法,统一了规则,同时确保每次输入后都重新验证:
static void Reverse() { string name; Console.Write("Enter your name: "); name = Console.ReadLine(); // 第一次验证输入是否合法 bool isInputValid = IsValidName(name); // 如果不合法,循环提示直到输入正确 while (!isInputValid) { Console.Write("Error! Enter your name, only letters and spaces allowed: "); name = Console.ReadLine(); // 每次输入新内容后,重新验证合法性 isInputValid = IsValidName(name); } // 输入合法后执行反转逻辑 char[] charArr = name.ToCharArray(); Array.Reverse(charArr); string nameRev = new string(charArr); Console.WriteLine("Reversed string: {0}", nameRev); } // 统一的输入验证方法,避免逻辑混乱 private static bool IsValidName(string input) { // 这里可以选你需要的验证规则,二选一即可: // 方式1:用LINQ检查每个字符是字母或空格,且输入不为空/空白 return !string.IsNullOrWhiteSpace(input) && input.All(c => char.IsLetter(c) || char.IsWhiteSpace(c)); // 方式2:用正则表达式(如果需要支持连字符,可以把[]里改成[a-zA-Z -]) // return !string.IsNullOrWhiteSpace(input) && Regex.IsMatch(input, @"^[a-zA-Z ]+$"); }
关键修改点
- 抽离验证方法:把验证逻辑放到
IsValidName里,确保整个程序用同一套规则判断合法性,不会出现前后矛盾。 - 每次输入后重新验证:在
while循环里,每次读取新的输入后都调用IsValidName更新验证结果,这样循环能正确判断什么时候退出。 - 调整流程逻辑:先做第一次验证,不合法就进入循环,直到输入正确后再执行反转,比原来的
if-else结构更清晰,避免分支里的逻辑遗漏。
内容的提问来源于stack exchange,提问作者Aker
相关产品推荐
相关产品推荐

