如何修复C#编写的K-pop周边售卖程序累计计算选购商品总金额的逻辑错误
K-pop周边售卖结算程序C#代码修正
原有代码核心问题
total变量未初始化,且每次结算时是直接赋值而非累加,导致无法累计多件商品金额- 外层使用了固定次数的for循环,限制了用户可购买的商品种类数量
- 存在大量重复的商品选择、数量输入逻辑,代码冗余且容易出错
- 计算总金额时错误乘以了
choice变量(商品编号),导致金额计算错误 - RED VELVET周边的价格在分支中错误写为700php,和定义的980php不符
- 未实现结算后询问用户是否需要再次使用程序的功能
- 未做输入合法性校验,用户输入非数字时会直接崩溃
修正后完整代码
using System; namespace KpopMerchCheckout { class Program { static void Main(string[] args) { // 控制程序是否重启 bool restartProgram; do { restartProgram = false; int total = 0; // 初始化总金额为0 string w = "WELCOME "; Console.SetCursorPosition((Console.WindowWidth - w.Length) / 2, Console.CursorTop); Console.WriteLine(w); Console.WriteLine(""); System.Threading.Thread.Sleep(2000); string p = "HERE'S OUR MERCHANDISES! "; Console.SetCursorPosition((Console.WindowWidth - p.Length) / 2, Console.CursorTop); Console.WriteLine(p); System.Threading.Thread.Sleep(2000); string[] products = { "[1]BLACKPINK Lightstick ", "[2]DREAMCATCHER Seasons Greetings", "[3]RED VELVET Summer Package"}; for (int g = 0; g < products.Length; g++) { Console.WriteLine(products[g]); } bool isCheckout = false; // 选购循环,用户选择结算时退出 while (!isCheckout) { int choice = 0; bool inputValid = false; // 商品选择输入校验 while (!inputValid) { Console.Write("Pick your product: "); inputValid = int.TryParse(Console.ReadLine(), out choice) && choice >= 1 && choice <= 3; if (!inputValid) { Console.WriteLine("请输入1-3之间的有效商品编号!"); } } int price = 0; switch (choice) { case 1: Console.WriteLine("BLACKPINK Lightstick 1500php"); price = 1500; break; case 2: Console.WriteLine("DREAMCATCHER Seasons Greetings 920php"); price = 920; break; case 3: Console.WriteLine("RED VELVET Summer Package 980php"); price = 980; break; } int quanti = 0; inputValid = false; // 购买数量输入校验 while (!inputValid) { Console.WriteLine("Quantity of product: "); inputValid = int.TryParse(Console.ReadLine(), out quanti) && quanti > 0; if (!inputValid) { Console.WriteLine("请输入大于0的有效购买数量!"); } } // 累加当前商品金额到总金额 total += price * quanti; System.Threading.Thread.Sleep(2000); int decide = 0; inputValid = false; // 操作选择输入校验 while (!inputValid) { Console.WriteLine("[1] Add more products [2] Pay: "); inputValid = int.TryParse(Console.ReadLine(), out decide) && (decide == 1 || decide == 2); if (!inputValid) { Console.WriteLine("请输入1或2选择对应操作!"); } } if (decide == 2) { isCheckout = true; } } // 输出总金额 Console.WriteLine($"所有商品总金额:{total}php"); // 询问是否需要再次使用程序 int restartChoice = 0; bool restartValid = false; while (!restartValid) { Console.WriteLine("是否需要再次使用程序?[1] 是 [2] 否"); restartValid = int.TryParse(Console.ReadLine(), out restartChoice) && (restartChoice == 1 || restartChoice == 2); if (!restartValid) { Console.WriteLine("请输入1或2选择对应操作!"); } } if (restartChoice == 1) { restartProgram = true; Console.Clear(); } } while (restartProgram); Console.WriteLine("感谢使用,程序即将退出"); System.Threading.Thread.Sleep(1000); } } }
关键修正说明
- 初始化
total = 0,每次用户选购完商品就将当前商品的金额累加到total中,确保多件商品金额可以正确累计 - 替换原有固定次数的for循环为无限循环,用户选择结算时才退出选购流程,不受商品数量限制
- 抽离重复的商品选择、价格匹配逻辑,消除冗余代码
- 修复金额计算公式,删除错误的
choice乘数 - 统一所有分支中商品的价格定义,避免数值不一致
- 新增结算完成后是否重启程序的判断逻辑,符合需求
- 补充了基础的输入合法性校验,避免用户输入非法值导致程序崩溃
内容的提问来源于stack exchange,提问作者MULTI FANDOM
相关产品推荐
相关产品推荐

