【问题标题】:How to detect a pressed key?如何检测按下的键?
【发布时间】:2022-11-17 04:20:52
【问题描述】:

我有一个大学作业,我必须将字符串作为输入并在用户按 CTRL + z 时停止程序,然后显示最长和最短的字符串。我的 Z 没问题,但我似乎无法检测到用户是否按下了 CTRL z。

我尝试使用 (ki.Modifiers & ConsoleModifiers.Control) 但它没有用。 这是代码

Console.Write("Enter a string: ");
String input = Console.ReadLine();
String l = input;
String s = input;
ConsoleKeyInfo ki = new ConsoleKeyInfo();

while (ki.Key != ConsoleKey.Z )
{
    Console.Write("Enter another string: ");
    input = Console.ReadLine();

    if (input.Length > l.Length) l = input;
    else if (input.Length < s.Length) s = input;
    Console.WriteLine("Press enter to continue or <CTRL> + Z to exit");
    ki = Console.ReadKey(true);
}
Console.WriteLine("Longest string: " + l);
Console.WriteLine("Shortest string: " + s);
Console.ReadLine();

【问题讨论】:

  • Idk C# 但在 Java 中有许多事件侦听器,如 onKeyPressed,而在 C++ 中,有事件侦听器,如 pressing() 和 pressed()。
  • 您的实现不是 Ctrl+Z 的 Linuxy 行为

标签: c# modifier console.readkey


【解决方案1】:

了解如何使用调试器和调试。如果在第 16 行设置断点,您可能会发现以下内容:

放入代码:

!(ki.Key == ConsoleKey.Z && ki.Modifiers == ConsoleModifiers.Control)

或者简单地

ki.KeyChar != 26

你用过 Linux 吗?如果没有,请获取虚拟机并执行

You@VM /h
$ cat > input.txt
asd
lll
^Z                       <-- Press Ctrl+Z here

[1]+ Stopped    cat > input.txt

You@VM /h
$ cat input.txt
asd
lll

这可能是 Ctrl+Z 的预期行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-29
    • 2010-11-09
    • 2013-04-07
    • 1970-01-01
    • 2011-02-26
    • 2010-10-24
    • 2018-10-24
    相关资源
    最近更新 更多