C# Do While循环如何留存用户输入?新手求和问题求解
解决C# Do While循环累加价格的问题
嘿,我来帮你搞定这个问题!你遇到的核心问题是没有做累加操作,而且可能把终止输入的-1也不小心算进总和里了。咱们一步步来修正:
关键思路
- 先初始化一个累加变量(比如
subtotal),初始值设为0,专门用来存储所有有效价格的总和——这个变量一定要放在循环外面,不然每次循环都会被重置为0! - 每次获取用户输入后,先判断是不是
-1:如果不是,就把这个价格加到累加变量里;如果是,就退出循环。 - 用安全的方式解析输入(比如
decimal.TryParse),避免用户输入非数字导致程序崩溃。
完整示例代码
using System; class PriceCalculator { static void Main() { // 初始化小计为0,用于累加所有有效价格 decimal subtotal = 0; decimal inputPrice; do { Console.WriteLine("请输入价格(输入-1结束):"); // 尝试将用户输入转换为decimal类型 bool isInputValid = decimal.TryParse(Console.ReadLine(), out inputPrice); if (isInputValid) { // 只有当输入不是终止符-1时,才累加到小计 if (inputPrice != -1) { subtotal += inputPrice; // 等价于 subtotal = subtotal + inputPrice; } } else { Console.WriteLine("哎呀,请输入有效的数字哦!"); // 如果输入无效,设置一个非-1的值,让循环继续执行 inputPrice = 0; } } while (inputPrice != -1); // 当输入-1时,退出循环 // 输出最终小计,用:C格式化为货币形式 Console.WriteLine($"所有输入价格的小计是:{subtotal:C}"); } }
重点解释
- 累加变量的位置:
subtotal在循环外初始化,这样每次循环都能保留之前累加的结果,不会被重置。 - 排除终止符:判断
inputPrice != -1后再累加,避免把结束命令-1算进总和里。 - 安全解析输入:
decimal.TryParse会返回布尔值表示解析是否成功,比直接用decimal.Parse更稳健,不会因为用户输入字母就崩溃。
内容的提问来源于stack exchange,提问作者Jimm09
相关产品推荐
相关产品推荐

