为什么控制台在我上次输入后关闭?

时间:2015-02-12 11:01:40

标签: c# console

我的程序允许用户输入20个价格并显示这些值的平均值。输入上一次输入后,为什么控制台关闭?下面是我正在运行的代码:

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

namespace machineproblem4
{
    class Program
    {
        static void Main(string[] args)
        {
            int sum = 0;
            double average = 0;

            Console.WriteLine("\t\t\t         INPUT PRICES  \n");
            int[] price = new int[20];
            Console.WriteLine("\t\t\t  Please enter 20 prices \n");

            for (int ctr = 0; ctr < 20; ctr++)
            {
                Console.Write("Enter price {0} :   ", ctr + 1);
                price[ctr] = Convert.ToInt32(Console.ReadLine());

            }

            // [...calculate sum...]

            //average 

            Console.WriteLine("\n----------------------------");
            Console.WriteLine("||average of the prices||");
            average = sum / 20;
            Console.WriteLine("average of the prices:   {0}", average);

            //more code that outputs statistics about the inputs

            //exit

            //Edit: This is what fixed my problem
            Console.WriteLine("press any key to exit ..");
            Console.ReadKey();
        }
    }
}

5 个答案:

答案 0 :(得分:2)

使用Console.Readline();

Read(),ReadLine()和ReadKey()基本上都是静态方法,它们属于Console类。这就是我们使用这些方法的原因:

Console.Read(): - 方法接受String并返回整数。

Console.ReadLine(): - 方法接受String并返回字符串。

Console.ReadKey(): - 方法接受角色并返回角色。

这就是我们大多使用Console.ReadKey()方法从输出窗口返回源代码的原因。

因为当我们只按下角色时我们直接来源代码。如果您将使用Console.Read()和Console.ReadLine方法 你需要按回车键,回到源代码而不是任何角色。

答案 1 :(得分:0)

您可以在最后一个语句中放置Console.Read()。您还可以在最后一个语句中放置断点

答案 2 :(得分:0)

把:

Console.Readline();

在主函数的末尾,所以等到你在关闭之前按Enter键。

答案 3 :(得分:0)

通常,等待来自控制台应用程序的用户输入不是一个好主意。这对于调试是可以的,但不一定是发布。 因此,首先要确定您的应用程序是使用

进行调试还是发布配置
private static bool IsDebug()
{
    object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(DebuggableAttribute), false);
    if ((customAttributes != null) && (customAttributes.Length == 1))
    {
        DebuggableAttribute attribute = customAttributes[0] as DebuggableAttribute;
        return (attribute.IsJITOptimizerDisabled && attribute.IsJITTrackingEnabled);
    }
    return false;
}

然后使用,

if (IsDebug())
    Console.Readline();

这消除了编辑不同构建配置的代码的需要。另一种方法是根据@Erwin

的建议设置断点并调试控制台应用程序

答案 4 :(得分:0)

以前的答案实际上都没有直接回答为什么会发生这种情况的问题。在最后一次输入后控制台关闭的原因是其余代码运行得非常快,当它到达程序结束时,控制台将关闭。这是正确的行为,在运行控制台应用程序时应该是预期的。正如其他答案所述,您可以通过在关闭控制台之前要求最终输入来解决这个问题,但就是这样,一个解决方法。

如果您要输出到文本文件而不仅仅是控制台,您会看到所有输出都是按照您的预期生成的。控制台输出和关闭速度太快,您无法在代码中暂停一下。

此外,尚未提及的解决方案是从Visual Studio运行项目而不进行调试,当它在关闭控制台之前完成处理时将自动输出“按任意键继续...”。通过这种方式,您可以在没有生产代码中不需要的无关代码的情况下查看输出内容。