C#使用do-while循环计算输入数字乘积的代码问题求解
问题分析
你现有代码的bug来自执行顺序的设计错误:第一次输入在循环外读取后,进入do-while循环体时没有做终止符判断,就直接把输入内容转成整数参与乘法运算。如果首次输入是x,代码会尝试把字符串"x"转为整数,要么抛出格式异常,要么完全走不到终止判断的分支,自然实现不了首次输x返回1的要求。
修复方案
调整循环内的执行顺序,把输入读取、终止判断的逻辑全部收拢到循环内部,利用do-while先执行一次循环体的特性,刚好匹配需求:
- 初始乘积值保持
int product = 1,作为无任何有效数字输入时的默认返回值 - 每次进入循环第一步先读取用户输入,兼容首尾空格的异常输入场景
- 拿到输入后优先判断是否为不区分大小写的终止符
x,命中则直接跳出循环 - 非终止符的输入先做整数合法性校验,转换成功后再参与乘积计算,避免非法输入导致程序崩溃
- 循环条件设为恒真,所有终止逻辑靠输入判断后的break触发
修复后可运行代码
int product = 1; string input; do { Console.WriteLine("请输入整数(输入x终止计算):"); input = Console.ReadLine()?.Trim() ?? ""; // 命中终止符直接跳出循环 if (input.ToLower() == "x") { break; } // 校验输入合法性后再计算 if (int.TryParse(input, out int num)) { product *= num; } else { Console.WriteLine("输入无效,请输入合法整数,或输入x终止计算"); } } while (true); Console.WriteLine($"乘积计算结果:{product}"); Console.ReadLine();
效果验证
- 首次运行直接输入
x:循环读取到x后直接跳出,product保持初始值1,输出结果1,符合要求 - 依次输入2、4、5、x:乘积计算为245=40,输出结果正确
- 输入非数字内容时会给出无效提示,不会直接崩溃
内容的提问来源于stack exchange,提问作者Catalin Stoia
相关产品推荐
相关产品推荐

