C# 控制台应用程序退出方法不工作

C# 控制台应用程序退出方法不工作,c#,.net,methods,exit,C#,.net,Methods,Exit,按q return时exit方法不工作,出现异常句柄错误。我应该同时使用application.exit()和envoirnment.exit(),这是一个控制台应用程序。两者都不起作用。我做错什么了吗。我会非常感激你的帮助 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace calculator_e

按q return时exit方法不工作,出现异常句柄错误。我应该同时使用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;
    }



        }
    }

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

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

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

尝试更改代码,删除案例“q”并替换:

char c = Convert.ToChar(Console.ReadLine());
以下是:

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

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

尝试更改代码,删除案例“q”并替换:

char c = Convert.ToChar(Console.ReadLine());
以下是:

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

只需像那样更改代码

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

只需像那样更改代码

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

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()); 
这段代码

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()); 


“不起作用”一点帮助都没有。可能是因为您的应用程序在按“q”后等待2个数字?是的,我在函数中传递了两个参数。但有什么方法可以解决这个问题吗?也可以使用ToUpper(字符)或ToLower(字符)。保存您对小写和大写的检查。@科幻小说,除非字符显示为空……“不起作用”根本没有帮助。可能是因为您的应用程序在按“q”后等待2个数字?是的,或者我在函数中传递了两个参数。但有什么方法可以解决这个问题吗?也可以使用ToUpper(字符)或ToLower(字符)。省去了对小写和大写字符的检查。@科幻小说,除非字符显示为空……是的,我试过了。但是我如何解决异常句柄错误。我想错误是因为我从用户那里获取了两个输入,这是arthematic ops所必需的。有没有办法解决这个错误?他已经在使用
环境了。退出
。设置显式返回码不会改变任何事情,问题可能是他在读取命令字符之后处理命令之前读取了另外两个字符。好的,然后首先检查是否
c=='q'
,然后在控制台应用程序中输入整数之前退出应用程序。是的,我试过了。但是我如何解决异常句柄错误。错误是因为我从用户那里获取了两个输入,这是arthematic ops所必需的。有没有办法解决他已经在使用的错误
环境。退出
。设置显式返回码不会改变任何事情,问题可能是他在读取命令字符之后处理命令之前读取了另外两个字符。好的,然后首先检查是否
c==“q”
,然后在控制台应用程序中输入整数之前退出应用程序。问题是因为它从控制台读取了3行,而不是退出功能失败读取3行不是真正的问题!使用我的代码,您不需要强制退出应用程序。您不必强制退出应用程序,只需
返回
,而不必
中断
。问题的产生是因为OP检查“q”直到另外两个读取行填充
a
b
之后才被处理。问题是因为它从控制台读取了3行,而不是退出功能失败读取3行不是真正的问题!使用我的代码,您不需要强制退出应用程序。您不必强制退出应用程序,只需
返回
,而不必
中断
。出现问题的原因是,在其他两个额外的读取行填充
a
b
之后,才会处理对“q”的检查。当然,在一个简单的控制台应用程序中,仅从主功能返回也会退出…伙计们检查第二个代码并回复。谢谢你们的帮助。当然,从一个简单的控制台应用程序的主功能返回也会退出。大家检查第二个代码并回复。谢谢你们的帮助,大家都很好,你们能解释一下return在这里用什么吗对不起,我是新来的。我知道的是编译器会逐行检查代码,正如你们提到的,它需要三行代码。return在这里做什么?thanks@Geekreturn语句将告诉函数返回并停止处理。由于该函数是控制台应用程序的入口点,因此将导致应用程序退出。唯一的例外是,如果你开始使用后台线程。谢谢bob的解释。呵呵不,对我来说,使用后台线程还为时过早:P但非常感谢你的帮助:)好的,你能解释一下这里使用的是什么吗对不起,我是新的。我知道的是编译器按照你提到的那样逐行检查代码一共花了三行。你在这儿干什么?thanks@Geekreturn语句将告诉函数返回并停止处理。由于该函数是控制台应用程序的入口点,因此将导致应用程序退出。唯一的例外是,如果你开始使用后台线程做一些事情。谢谢bob的解释。呵呵,不,对我来说,使用后台线程还为时过早:P但非常感谢你的帮助:)