You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用for循环结合if-else实现控制台计算器循环运行至用户退出?

控制台计算器循环运行的实现方案

嗨,关于你的问题:当然可以用for循环结合if-else来实现计算器的循环运行直至用户选择退出,不过从代码可读性和场景适配性来说,while或do-while循环会更贴合这种“未知次数、依赖用户输入决定是否终止”的需求。我会先演示你想要的for循环实现方式,再给出更推荐的优化方案,同时修复你现有代码里的几个小问题。

一、用for循环结合if-else实现

我们可以把for循环写成无限循环(for(;;)),然后在循环内部通过if-else判断用户是否想要退出,满足退出条件时用break跳出循环。修改后的代码如下:

using System;

namespace Oppgave3Lesson1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 无限for循环,直到用户选择退出
            for (;;)
            {
                double num1, num2, result = 0;
                bool isValidInput = true;

                // 获取第一个数字,修复类型转换问题(double变量用ToDouble)
                Console.WriteLine("First number: ");
                if (!double.TryParse(Console.ReadLine(), out num1))
                {
                    Console.WriteLine("请输入有效的数字!");
                    isValidInput = false;
                }

                if (isValidInput)
                {
                    // 获取第二个数字
                    Console.WriteLine("Second number: ");
                    if (!double.TryParse(Console.ReadLine(), out num2))
                    {
                        Console.WriteLine("请输入有效的数字!");
                        isValidInput = false;
                    }
                }

                if (isValidInput)
                {
                    // 获取运算类型
                    Console.WriteLine("Addisjon eller Subtraksjon?");
                    string regneoperasjon = Console.ReadLine()?.Trim();

                    // 执行运算
                    if (regneoperasjon == "Subtraksjon")
                    {
                        result = num1 - num2;
                        Console.WriteLine($"Svaret til denne regneoperasjonen er: {result}");
                    }
                    else if (regneoperasjon == "Addisjon")
                    {
                        result = num1 + num2;
                        Console.WriteLine($"Svaret til denne regneoperasjonen er: {result}");
                    }
                    else
                    {
                        Console.WriteLine("未知的运算类型,请输入Addisjon或Subtraksjon!");
                    }
                }

                // 判断是否继续
                Console.WriteLine("Do you want to do another math operation? (Y/N)");
                string continueChoice = Console.ReadLine()?.Trim().ToUpper();
                // 用if-else判断退出条件
                if (continueChoice == "N")
                {
                    Console.WriteLine("应用程序即将退出,再见!");
                    break; // 跳出for循环
                }
                else if (continueChoice != "Y")
                {
                    Console.WriteLine("输入无效,将继续运行计算器...");
                }
            }
        }
    }
}

二、更推荐的do-while循环实现

因为计算器需要先执行一次运算,再询问是否继续,do-while循环的“先执行、后判断”特性会更符合这个场景,代码逻辑也更清晰:

using System;

namespace Oppgave3Lesson1
{
    class Program
    {
        static void Main(string[] args)
        {
            bool keepRunning = true;
            do
            {
                double num1, num2, result = 0;
                bool isValidInput = true;

                // 获取第一个数字
                Console.WriteLine("First number: ");
                if (!double.TryParse(Console.ReadLine(), out num1))
                {
                    Console.WriteLine("请输入有效的数字!");
                    isValidInput = false;
                }

                if (isValidInput)
                {
                    // 获取第二个数字
                    Console.WriteLine("Second number: ");
                    if (!double.TryParse(Console.ReadLine(), out num2))
                    {
                        Console.WriteLine("请输入有效的数字!");
                        isValidInput = false;
                    }
                }

                if (isValidInput)
                {
                    // 获取运算类型
                    Console.WriteLine("Addisjon eller Subtraksjon?");
                    string regneoperasjon = Console.ReadLine()?.Trim();

                    // 执行运算
                    if (regneoperasjon == "Subtraksjon")
                    {
                        result = num1 - num2;
                        Console.WriteLine($"Svaret til denne regneoperasjonen er: {result}");
                    }
                    else if (regneoperasjon == "Addisjon")
                    {
                        result = num1 + num2;
                        Console.WriteLine($"Svaret til denne regneoperasjonen er: {result}");
                    }
                    else
                    {
                        Console.WriteLine("未知的运算类型,请输入Addisjon或Subtraksjon!");
                    }
                }

                // 判断是否继续
                Console.WriteLine("Do you want to do another math operation? (Y/N)");
                string continueChoice = Console.ReadLine()?.Trim().ToUpper();
                if (continueChoice == "N")
                {
                    keepRunning = false;
                    Console.WriteLine("应用程序即将退出,再见!");
                }
                else if (continueChoice != "Y")
                {
                    Console.WriteLine("输入无效,将继续运行计算器...");
                }

            } while (keepRunning); // 当keepRunning为true时继续循环
        }
    }
}

代码改动说明

  • 修复了类型转换问题:原来用Convert.ToInt32给double变量赋值,改成了更安全的double.TryParse(还能处理用户输入非数字的错误情况)
  • 增加了运算类型的错误判断:如果用户输入的不是指定的运算,会给出提示
  • 完善了退出逻辑:明确让用户输入Y/N来选择是否继续,通过if-else判断并控制循环的终止
  • 使用字符串插值($"")替代字符串拼接,代码更简洁易读

内容的提问来源于stack exchange,提问作者user8746169

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:45:59