【问题标题】:How to get the program in C# to react to user input如何让 C# 中的程序对用户输入做出反应
【发布时间】:2018-09-19 12:59:30
【问题描述】:

所以下面是我的代码。当我按 5 时,我必须按 Enter 5 次才能让程序写入该行,然后按 6 根本不起作用。任何解决方案将不胜感激。

            Boolean keepRunning = true;
            while (keepRunning = true)
            {
                if (Console.ReadLine() == "1")
                {
                    Console.WriteLine("Still running");
                }
                else if (Console.ReadLine() == "2")
                {
                    Console.WriteLine("Still running2");
                }
                else if (Console.ReadLine() == "3")
                {
                    Console.WriteLine("Still running3");
                }
                else if (Console.ReadLine() == "4")
                {
                    Console.WriteLine("Still running4");
                }
                else if (Console.ReadLine() == "5")
                {
                    Console.WriteLine("Still running5");
                }
                else if (Console.ReadLine() == "6")
                {
                    keepRunning = false;
                }
            }

【问题讨论】:

  • 一个有用的问题要问自己,每当您的代码没有达到您的预期时,“我在这段代码中做了什么假设?”您的错误假设是 Console.ReadLine() 所做的(以及 keepRunning = true 所做的)。阅读文档可能会有所帮助。
  • Console.Readline() 在那里暂停程序,直到按下某个键。在这里它进入第一个if 并等待按键。如果不是 1,则进入第二个 else...if 并再次检查密钥。在@MightyBadaboom 解决方案中,您只需要阅读一次
  • ReadLine() 期望用户在继续之前按回车键,因此这仅对一次击键无效。无论如何,在每条指令中使用 ReadLine 没有意义,因为程序将在每个条件下停止,直到输入一个键:第一次它需要“1”,所以如果你输入任何其他键,你将进入下一个链接条件,期望为“2”等等......

标签: c# while-loop readline


【解决方案1】:

您正在等待每个Console.ReadLine(); 的输入。只阅读一次输入,然后决定要做什么。

您应该将您的 while 条件更改为 keepRunning == true。在您当前的版本中,您将 keepRunning 设置为 true 在您的情况下,这就是为什么“6”似乎不起作用的原因;)

Boolean keepRunning = true;
while (keepRunning == true)
{
    string input = Console.ReadLine();

    if (input == "1")
    {
        Console.WriteLine("Still running");
    }
    else if (input == "2")
    {
        Console.WriteLine("Still running2");
    }
    else if (input == "3")
    {
        Console.WriteLine("Still running3");
    }
    else if (input == "4")
    {
        Console.WriteLine("Still running4");
    }
    else if (input == "5")
    {
        Console.WriteLine("Still running5");
    }
    else if (input == "6")
    {
        keepRunning = false;
    }
}

您可以使用 switch 语句使其变得更好。

switch(input)
{
    case "1":
        Console.WriteLine("Still running");
        break;
    case "2":
        Console.WriteLine("Still running");
        break;
    case "3":
        Console.WriteLine("Still running");
        break;
    case "4":
        Console.WriteLine("Still running");
        break;
    case "5":
        Console.WriteLine("Still running");
        break;
    case "6":
        keepRunning = false;
        break;
    default:
        break;
}

【讨论】:

  • @Caleb 不客气。并感谢您提前接受答案
【解决方案2】:

您应该每次迭代只读取一次行。请参见下面的示例:

string readLine = "";
Boolean keepRunning = true;
while (keepRunning)
{
    readLine= Console.ReadLine();
    switch readLine{
        case "1":
            Console.WriteLine("Still running");
            break;
        case "2":
            Console.WriteLine("Still running2");
            break;
        case "3":
            Console.WriteLine("Still running3");
            break;
        case "4":
            Console.WriteLine("Still running4");
            break;
        case "5":
            Console.WriteLine("Still running5");
            break;
        case "6":
            keepRunning = false;
            break;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2021-05-12
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多