【问题标题】:C# Console.Readkey - wait for specific inputC# Console.Readkey - 等待特定输入
【发布时间】:2011-10-28 15:10:57
【问题描述】:

我正在编写一个小型 C# 控制台应用程序。

我希望应用程序等待用户关于 Y 或 N 按键的指令(如果按下任何其他键,应用程序将忽略此并等待 Y 或 N,然后运行取决于是或否的答案。

我想出了这个主意,

while (true)
{
    ConsoleKeyInfo result = Console.ReadKey();
    if ((result.KeyChar == "Y") || (result.KeyChar == "y"))
    {
         Console.WriteLine("I'll now do stuff.");
         break;
    }
    else if ((result.KeyChar == "N") || (result.KeyChar == "n"))
    {
        Console.WriteLine("I wont do anything");
        break;
    }
}

可悲的是,尽管 VS 说它不喜欢结果。Keychat == 因为操作数不能应用于“字符”或“字符串”

有什么帮助吗?

提前致谢。

【问题讨论】:

  • 单引号,不是双引号 ... (result.KeyChar == 'Y') || (result.KeyChar == 'y')

标签: c# console keypress


【解决方案1】:

KeyCharchar,而 "Y"string

你想要像KeyChar == 'Y' 这样的东西。

【讨论】:

  • 非常感谢。我的一个小学生错误。在 php 迁移之后仍然在 C# 中苦苦挣扎!再次感谢。
  • 另一种选择是:result.Key == ConsoleKey.Y
  • @K_Rol:这可能行得通。我担心它不仅会接受YShift+Y,还会接受Ctrl+Y
  • 你说得对,我刚刚测试过它确实接受 Shift+Y(或任何组合)。
【解决方案2】:

改为检查这个

string result = Console.ReadLine();

然后检查结果

【讨论】:

    【解决方案3】:

    你正在寻找的是这样的:

    void PlayAgain()
    {
        Console.WriteLine("Would you like to play again? Y/N: ");
        string result = Console.ReadLine();
        if (result.Equals("y", StringComparison.OrdinalIgnoreCase) || result.Equals("yes", StringComparison.OrdinalIgnoreCase))
        {
            Start();
        }
        else
        {
            Console.WriteLine("Thank you for playing.");
            Console.ReadKey();
        }
    }
    

    【讨论】:

      【解决方案4】:

      您可能希望用户通过按 Enter 来确认他们的响应,因此最好使用 ReadLine。还将字符串响应转换为大写以进行通用比较检查。像这样:

      string result = Console.ReadLine();
      if (result.ToUpper().Equals("Y"))
      {
          // Do what ya do ...
      

      【讨论】:

        猜你喜欢
        • 2016-06-26
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 2017-03-13
        • 2012-05-21
        • 1970-01-01
        相关资源
        最近更新 更多