C#中While循环输入-1时错误计入计算的问题求助
解决停车收费程序的循环与计算问题
嘿,很高兴能帮到你!作为C#入门学习者,遇到这种逻辑小问题很正常,咱们一步步来把它捋顺。
问题根源分析
你的代码现在有几个关键逻辑漏洞,导致输入-1时会错误计算费用:
- 循环顺序颠倒:当前循环先判断
hoursParked != -1再读取输入,这意味着当你输入-1时,程序已经进入了循环体,还是会执行后续的收费计算逻辑(因为进入循环时hoursParked还是上一次的有效值)。 - 条件分支嵌套错误:你把
hoursParked > 18的判断放在了hoursParked <=18的if块里,这个条件永远不会被触发,逻辑完全矛盾。 - 总费用输出时机不对:总费用的打印代码在循环内部,导致每次输入都会输出一次总费用,而不是在所有输入结束后才输出最终结果。
修正后的代码
我保留了你原有的核心逻辑,只调整了关键的循环和判断部分,符合课程当前的要求:
// 先定义费率常量(假设你已经声明了这些变量) double lessThan3Rate = 2.00; // 2小时内收费2美元 double moreThan18Rate = 10.00; // 超过18小时统一收10美元 double feeCharged = 0; double totalAllReceipts = 0; double hoursParked; // 改用do-while循环:先读取输入,再判断是否退出 do { Console.WriteLine("Enter each customer's total hours parked (no more than 24) or type -1 to quit: "); hoursParked = Double.Parse(Console.ReadLine()); // 先判断是否是退出指令,是的话直接跳过计算 if (hoursParked == -1) { break; } // 修正条件分支:用else if确保区间互斥,逻辑清晰 if (hoursParked > 0 && hoursParked < 3.0) { feeCharged = lessThan3Rate; } else if (hoursParked >= 3.0 && hoursParked <= 18.00) { // 原公式:2美元基础费 + 超过2小时的部分每小时0.5美元 feeCharged = 2.00 + ((hoursParked - 2) * 0.50); } else if (hoursParked > 18.00 && hoursParked <=24.00) { feeCharged = moreThan18Rate; } else { // 处理无效输入(比如0或超过24小时) Console.WriteLine("Invalid input! Please enter a number between 0 and 24, or -1 to quit."); continue; // 跳过本次循环的后续逻辑,重新输入 } // 只有输入有效时才打印费用并累加总金额 Console.WriteLine($"The customer's charge is: {feeCharged:C}"); Console.WriteLine(); totalAllReceipts += feeCharged; } while (true); // 内部用break判断退出,循环条件设为true即可 // 循环结束后再打印当日总费用 Console.WriteLine("End of Day Totals:"); Console.WriteLine($"The daily total of all receipts is: {totalAllReceipts:C}");
关键修改说明
- do-while循环:先执行一次输入操作,再判断是否退出,这样输入
-1时会直接跳出循环,不会进入收费计算逻辑。 - 提前判断退出指令:读取输入后立刻检查是否是
-1,是的话直接break,避免后续无效计算。 - else if分支:确保每个停车时长区间的判断互斥,解决了之前
>18嵌套在<=18里的逻辑矛盾。 - 总费用输出移到循环外:只有当所有输入处理完成、循环结束后,才打印当日总费用,符合业务逻辑。
这样修改后,输入-1就不会再错误计入费用,总金额也能正确累加所有有效输入的费用啦!
内容的提问来源于stack exchange,提问作者ldp
相关产品推荐
相关产品推荐

