C#如何停止控制台程序等待下一行的输入?

问题描述 投票:0回答:2

所以我刚开始,我正在创建一个控制台程序,用户将在其中输入一个int。在输入“ ok”之前,它应该继续要求一个int值。当他们输入“确定”时,应该将他们输入的所有数字加起来。

我遇到的问题是,当它要求用户输入时,我输入一个数字并按Enter键。然后它将移至下一行并再次等待输入。在下一行输入数字可以使程序继续运行。如何获得程序以获取第一个输入并从那里继续?

下面的代码,希望我的问题有意义。


class Program
{
    static void Main(string[] args)
    {
        bool tag = true;
        List<int> numbers = new List<int>();
        while (tag == true)
        {
            Console.Write("Please enter a number or 'ok' to end: ");
            if (Console.ReadLine().Equals("ok"))
            {
                tag = false;
            }
            else
            {
                int numb = Int32.Parse(Console.ReadLine());
                numbers.Add(numb);
            }
        }

        int total = 0;
        foreach (int n in numbers)
        {
            total = total + n;
        }
        Console.WriteLine("All numbers added together equals: " + total);
    }
}
c#
2个回答
1
投票

您应该从控制台每次迭代只读取一次。

//[...]
while (tag == true)
{
    Console.Write("Please enter a number or 'ok' to end: ");
    var input = Console.ReadLine();
    if (input.Equals("ok"))
    {
        tag = false;
    }
    else
    {
        int numb = Int32.Parse(input);
        numbers.Add(numb);
    }
}
//[...]

每次调用Console.ReadLine时,用户都必须输入输入-因为您将其调用一次以与“ Ok”进行比较,然后再次进行解析,则用户必须输入一个数字两次。

如果使用输入作为循环条件,您甚至可以更进一步忽略tag变量:

var input = "";
var numbers = new List<int>();
while((input = Console.ReadLine()) != "ok")
{
    numbers.Add(int.Parse(input));
}

如果用户输入的内容既不是“确定”也不是有效的整数,则所有这些操作都不会出错。为此,您应该看看int32.TryParse


0
投票

因此,当我完成我的回答时,已经有一个指出问题的答案(多次从控制台读取而不是将结果存储在变量中)。我还是决定发布代码,这样您就可以看到另一种对您有效的方法(不存储所有数字):

int32.TryParse
© www.soinside.com 2019 - 2024. All rights reserved.