1

我正在尝试关闭我的 c# 控制台应用程序(在没有调试的情况下运行)并且没有任何工作......我已经尝试了所有具有不同退出代码的常见嫌疑人,但没有任何东西终止它=/是因为该选项在一堆嵌套中如果语句?它可能是我想念的非常简单的东西,但它现在伤害了我的大脑,请有人帮忙!我试过了 :

System.Environment.Exit(0);
System.Environment.Exit(1);
System.Environment.Exit(-1);
return;
Application.Exit(); //(wont even except it)

如果上下文有帮助,我使用嵌套的 if 语句来检查用户是否输入了数字或字母“q”,如果他们输入了数字,则执行计算,如果输入了字母 q,则程序将退出并对于其他任何错误语句都会输出。

string userInput;
int userInputDigit = 0;
double userCost = 0;
char userInputChar;

userInput = Convert.ToString(Console.ReadLine());

if (int.TryParse(userInput, out userInputDigit))
{
    if (userInputDigit <= 50)
    {
        userCost = (price * userInputDigit);
        Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost);
    }
    else if ((userInputDigit > 50) && (userInputDigit <= 80))
    {
        userCost = (price * 50) + ((userInputDigit - 50) * (price - 1));
        Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost);
    }
    else if ((userInputDigit > 80) && (userInputDigit <= 100))
    {
        userCost = (price * 50) + (30 * (price - 1)) + ((userInputDigit - 80) * (price - 2.50));
        Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost);
    }
    else
    {
        Console.WriteLine("Error! Please input a number between 0 and 100");
    }

}
else if (char.TryParse(userInput, out userInputChar))
{
    if ((userInput == "q") || (userInput == "Q"))
    {
        System.Environment.Exit(0);
    }
    else
    {
        Console.WriteLine("Incorrect Letter Inputted");
    }
}
else
{
    Console.WriteLine("Error! Please input a number or 'q' to quit");
}
4

6 回答 6

4

我认为您需要做的是右键单击您的项目,选择“属性”,然后(引用 msdn.com):

在 Visual Studio 开发环境中设置此链接器选项

打开项目的属性页对话框。有关详细信息,请参阅设置 Visual C++ 项目属性。

单击链接器文件夹。

单击系统属性页。

修改子系统属性。

对于子系统,选择控制台。希望这可以帮助!:)

于 2012-11-02T21:19:00.267 回答
3

我建议您尝试 application.close() 功能。它多次拯救了我的一天。如果没有帮助,请告诉我。

于 2012-11-02T21:36:08.270 回答
1

我会首先在调试中运行您的应用程序并检查以确保您的 Application.Exit 确实受到打击。这可能会解释为什么应用程序没有退出。

您应该使用 Environment.Exit(0)。这似乎是结束控制台应用程序的更好方法。

来源: http: //geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

如果此代码在 Main 中,我建议使用 return;在您调用退出应用程序后。

于 2012-11-02T21:22:12.717 回答
0

如果您从 Visual Studio 启动控制台应用程序,而不是处于调试模式 (Ctrl+F5),则控制台窗口会在应用程序完成执行后保持打开状态。并提示Press any key to continue...同样,此时您的控制台应用程序已退出。

当您运行 *.exe 文件时,您的控制台将在不要求按键的情况下关闭。这只是 Visual Studio 的“功能”——它运行时cmd.exe告诉它运行您的可执行文件,然后暂停。

这是 Visual Studio 在您启动应用程序而不进行调试时所做的事情(您可以将其复制到 *.bat 文件并运行它)

ECHO OFF
CLS
"Path\To\Your\ConsoleApplication.exe"
PAUSE
于 2012-11-02T21:34:49.230 回答
0

使用循环,让 Main 正常返回。此外,我还尝试简化条件检查以及字符串比较和解析。您的错误消息表明验证范围(“介于”0 和 100 之间)实际上并未由前面的 if/else if 逻辑强制执行。例如,如果用户输入负值,您的第一种情况 (... <= 50) 将为真。另外,我没有看到价格是在哪里宣布的,所以我在我的例子中编了一个常数。

static bool ExitRequired(string line)
{
    return string.Equals(line, "q", StringComparison.OrdinalIgnoreCase);
}

static void Main(string[] args)
{
    const double price = 10;
    int userInputDigit;
    double userCost;
    string line = null;

    while (!ExitRequired(line))
    {
        Console.WriteLine("Enter a number or press 'q' to exit...");
        line = Console.ReadLine();

        if (ExitRequired(line))
            break;

        if (int.TryParse(line, out userInputDigit) 
            && userInputDigit > 0 
            && userInputDigit < 100)
        {
            if (userInputDigit <= 50)
            {
                userCost = (price * userInputDigit);
                Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost);
            }
            else if ((userInputDigit > 50) && (userInputDigit <= 80))
            {
                userCost = (price * 50) + ((userInputDigit - 50) * (price - 1));
                Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost);
            }
            else if ((userInputDigit > 80) && (userInputDigit <= 100))
            {
                userCost = (price * 50) + (30 * (price - 1)) + ((userInputDigit - 80) * (price - 2.50));
                Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost);
            }
        }
        else
        {
            Console.WriteLine("Error! Please input a number between 0 and 100");
        }
    }
}
于 2012-11-02T22:02:15.720 回答
0

当您从 Visual Studio 运行项目时,会添加“按任意键继续”文本。

相反,去垃圾箱并从那里运行它。

确保在运行之前构建项目。如果您从 VS 运行,它将在需要时自动构建,但从 Windows 资源管理器运行文件不会这样做。

于 2012-11-02T22:40:32.177 回答