【问题标题】:Terminate PROGRAM whenever key press每当按键时终止程序
【发布时间】:2017-07-13 15:46:08
【问题描述】:

我试图在按下 ESC 键时停止我的程序。

例如我有这样的代码:

char key;
char msg[20];
printf("\n\n\t\t     press escape to quit\n\n");
do {
    key = _getch();

    if (key == ESC) {
        printf("Key: ESCAPE");
        putchar('\n');

    }
    else {
        printf("Key: %c", key);
        putchar('\n');
    }
    Sleep(5000);


} while (key != ESC);

return 0;

现在,当我需要在按下 ESC 时立即退出程序时 有可能吗? 我的程序将在 5 秒后退出..

Sleep(5000)

我只想在按下 ESC 时立即退出程序。

我该怎么做?

【问题讨论】:

  • 你有没有尝试在按下 ESC 时在分支中打断?
  • 你的意思是在分支中放break你能举个例子吗?是另一种停止整个程序并忽略此睡眠功能的方法吗?我想我需要创建一个热键。在 autoit 中,它真的很简单,只是创建一个热键,当我按下 ESC - 主程序停止主循环并在我的热键中执行指令时。我怎么能在 c++ 中做到这一点,有什么想法吗?
  • 添加 Sleep() 调用是一个错误。您认为您需要这样才能看到 printf() 语句的输出。你没有,按 Ctrl+F5 来查看。您可以通过使用 GetConsoleProcessList() 来检测您是否需要“按任意键继续”样式交互来使其完美,因为当您的程序结束时控制台窗口将消失。
  • @UP 你是对的人,但你的回答对我没有帮助。是否可以在主循环之外创建热键功能,这将一直等待按键并执行指令?
  • if (key == ESC) { printf("Key: ESCAPE"); putchar('\n');休息;

标签: c++ keypress exit


【解决方案1】:

为什么要在循环中检查两次密钥?您只需一张支票即可完成此操作。

这个呢?

int key;
char msg[20];
printf("\n\n\t\t     press escape to quit\n\n");

while(true) {
    key = _getch();
    if(key == ESC) {
        printf("Key: ESCAPE");
        putchar('\n');
        break;
    }

    printf("Key: %c", key);
    putchar('\n');
    Sleep(5000);
}

【讨论】:

  • 是的,这很好,但是否可以让 2 个函数同时运行? 1个循环仍在运行....和2个循环可以同时运行,这可能吗?
  • @AdamZbudniewek 是的,这是可能的。要同时运行两个循环,您需要将它们放在不同的线程中。也许从这里开始了解线程。还要检查这个问题stackoverflow.com/questions/26425836/…
【解决方案2】:

嗯,你可以将它与它的 ASCII 码进行比较。 ESC键的ASCII码是27。

 char key;
char msg[20];
printf("\n\n\t\t     press escape to quit\n\n");
do {
  key = _getch();

  if (key == 27) {
      printf("Key: ESCAPE");
      putchar('\n');
  }
  else {
      printf("Key: %c", key);
      putchar('\n');
      Sleep(5000);
  }

} while (key != 27);

【讨论】:

    【解决方案3】:

    最简单的方法是将 sleep 调用移到 else 部分,这样只有在按下键 'ESC' 时才会执行。

    char key;
    char msg[20];
    printf("\n\n\t\t     press escape to quit\n\n");
    do {
        key = _getch();
    
        if (key == ESC) {
            printf("Key: ESCAPE");
            putchar('\n');
        }
        else {
            printf("Key: %c", key);
            putchar('\n');
            Sleep(5000);
        }
    
    } while (key != ESC);
    
    return 0;
    

    【讨论】:

    • 是的,你说得对,但这只是一个例子,我的代码更大,功能更多......我只需要在按下 ESC 程序退出时创建一个热键。在主循环中,我有“睡眠()”功能等等,现在我需要检查何时按下键结束整个程序
    • @Adam Zbudniewek:所以你想在按下 ESC 时退出你的程序,即使它正在做一些繁重的工作并且无法处理键盘输入,对吧?
    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多