【问题标题】:console application exit method not working控制台应用程序退出方法不起作用
【发布时间】:2012-08-13 11:35:17
【问题描述】:

exit 方法在按下 q 时不起作用,并带有异常句柄 error.it 是一个控制台应用程序,我应该同时使用 application.exit() 和 envoirnment.exit() 。两者都不起作用。难道我做错了什么 。非常感谢您的帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace calculator_extended
{
    class Program
    {
        static void Main(string[] args)
        {
            int d = 0;

            while (true)
            {
                Console.WriteLine("Press A for addition");
                Console.WriteLine("Press S for subtraction");
                Console.WriteLine("Press M for Multiplication");
                Console.WriteLine("Press D for Divide");
                Console.WriteLine("Press q for Exit");


                char c = Convert.ToChar(Console.ReadLine());

                int a = Convert.ToInt32(Console.ReadLine());
                int b = Convert.ToInt32(Console.ReadLine());

                switch (c)
                {
                    case 'A':
                    case 'a':
                        {
                            d = add(a, b);
                            Console.WriteLine(d);
                            break;


                        }


                    case 'S':
                    case 's':
                        {
                            d = sub(a, b);
                            Console.WriteLine(d);
                            break;
                        }

                    case 'M':
                    case 'm':
                        {
                            d = mul(a, b);
                            Console.WriteLine(d);
                            break;
                        }

                    case 'D':
                    case 'd':
                        {
                            d = div(a, b);
                            Console.WriteLine(d);
                            break;
                        }

                    case 'q':
                        {

                            Environment.Exit(0);
                            break;

                        }
                    default:
                        {

                            Console.WriteLine("Please Enter the correct Character");
                            break;
                        }



                }
            }
        }
            private static int add(int a, int b)
    {

                   return a + b;
    }
               private static int sub(int a, int b)
    {

                   return a - b;
    }
               private static int mul(int a, int b)
    {
                   return a * b;
    }
               private static int div(int a, int b)
    {

                   return a / b;
    }



        }
    }

好的,谢谢大家的帮助,你能检查一下,让我知道代码是否完美,我没有遗漏什么。谢谢

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace calculator_extended
{
    class Program
    {
        static void Main(string[] args)
        {
            int d = 0;

            while (true)
            {
                Console.WriteLine("Press A for addition");
                Console.WriteLine("Press S for subtraction");
                Console.WriteLine("Press M for Multiplication");
                Console.WriteLine("Press D for Divide");
                Console.WriteLine("Press q for Exit");


                char c = Convert.ToChar(Console.ReadLine());
                if (c == 'q')
                {
                    Environment.Exit(0);
                }
                int a = Convert.ToInt32(Console.ReadLine());
                int b = Convert.ToInt32(Console.ReadLine());

                switch (c)
                {
                    case 'A':
                    case 'a':
                        {
                            d = add(a, b);
                            Console.WriteLine(d);
                            break;


                        }


                    case 'S':
                    case 's':
                        {
                            d = sub(a, b);
                            Console.WriteLine(d);
                            break;
                        }

                    case 'M':
                    case 'm':
                        {
                            d = mul(a, b);
                            Console.WriteLine(d);
                            break;
                        }

                    case 'D':
                    case 'd':
                        {
                            d = div(a, b);
                            Console.WriteLine(d);
                            break;
                        }


                    default:
                        {

                            Console.WriteLine("Please Enter the correct Character");
                            break;
                        }



                }
            }
        }
            private static int add(int a, int b)
    {

                   return a + b;
    }
               private static int sub(int a, int b)
    {

                   return a - b;
    }
               private static int mul(int a, int b)
    {
                   return a * b;
    }
               private static int div(int a, int b)
    {

                   return a / b;
    }



        }
    }

【问题讨论】:

  • “不起作用”根本没有帮助。
  • 可能是因为您的应用程序在您按下“q”后等待了 2 个数字?
  • 是的,我在函数中传递了两个参数。但是有什么办法可以解决这个问题吗?
  • 也可以使用 ToUpper(Char) 或 ToLower(Char)。省去您检查大小写的麻烦。
  • @Science_Fiction 除非 Char 显示为空......

标签: c# .net methods exit


【解决方案1】:

可能是因为您的应用程序在您按“q”后等待 2 个数字?

尝试更改您的代码,删除大小写“q”并替换:

char c = Convert.ToChar(Console.ReadLine());

以下内容:

char c = Convert.ToChar(Console.ReadLine());
if(c.ToLower() == 'q')
{
    Environment.Exit(0);
}

【讨论】:

  • 当然,从简单的控制台应用程序中的主函数返回也会退出......
  • 伙计们检查第二个代码并回复。谢谢你们的帮助,你们太棒了
【解决方案2】:
char c = Convert.ToChar(Console.ReadLine());
// you will need to Exit here if char is 'q'
// else it is expecting to read more entries below before it reaches your "case"
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());

【讨论】:

    【解决方案3】:

    试试Environment.Exit()这应该可以正常工作。

    【讨论】:

    • 是的,我试过了。但是我如何解决异常处理错误。我认为这个错误是因为我从用户那里获取了两个输入,这对于算法操作来说是必需的。有没有办法解决这个错误
    • 他已经在使用Environment.Exit。设置显式返回码不会改变任何东西,问题可能是他在读取命令字符后处理命令之前又读取了两个字符。
    • 好的,然后先检查是否c == 'q' 并退出应用程序,然后再在控制台应用程序中输入整数。
    【解决方案4】:

    这段代码

    char c = Convert.ToChar(Console.ReadLine()); 
    int a = Convert.ToInt32(Console.ReadLine()); 
    int b = Convert.ToInt32(Console.ReadLine()); 
    

    从控制台读取 3 行。

    你可能想要

    char c = Convert.ToChar(Console.ReadLine()); 
    if (c=='Q' or c=='q') return;
    int a = Convert.ToInt32(Console.ReadLine()); 
    int b = Convert.ToInt32(Console.ReadLine()); 
    

    【讨论】:

    • 好的,你能解释一下这里的返回值吗?对不起,我是新手。我知道编译器会逐行检查代码,所以正如你所说,它需要三行。这里会返回什么?谢谢
    • @Geek return 语句将告诉函数返回并停止处理。由于该函数是控制台应用程序的入口点,这将导致应用程序退出。唯一的例外是如果您开始使用后台线程进行操作。
    • 感谢 bob 的解释。呵呵,后台线程对我来说太早了 :P 但非常感谢你的帮助 :)
    【解决方案5】:

    只需像这样更改您的代码

    bool exitLoop = false;
    while(exitLoop) {
        ...
        case 'q':
            {
                 exitLoop = true;
                 break;
            }
        ...
    }
    

    【讨论】:

    • 问题是因为它从控制台读取 3 行,而不是退出函数失败
    • 读3行真的不是问题!使用我的代码,您不需要强制应用程序退出。
    • 您不必强制退出应用程序,您可以只使用return 而不是break。出现问题的原因是,直到另外两个额外的读取行填充 ab 之后,才处理检查“q”的 OP
    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 2016-05-25
    • 2014-02-17
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    相关资源
    最近更新 更多