【问题标题】:The C++ program should exit as soon as he presses 'esc'C++ 程序应在他按下“esc”后立即退出
【发布时间】:2013-12-14 03:58:18
【问题描述】:

我有一个程序,其中的代码如下所示:

int Element[15];
cout << "Enter name/symbol of the Element: ";
cin >> Element;

我希望程序在他按下 'esc' 键后立即退出。而且用户在按下 'esc' 键后也不必再按下 'enter' 键。那该怎么做呢??

【问题讨论】:

  • windows 还是 linux?我认为无论哪种方式都需要使用 iostreams 之外的库,但至少在 Linux 上,您肯定必须关闭终端上的线路缓冲,这有点深奥。
  • 如果这不是 Windows,请调查ncurses
  • 我不知道在just C++(甚至C++11)的范围内没有办法做到这一点。你需要做一些特定于平台的事情。
  • 仅供参考,'\033' 是当今几乎所有计算机上由ESC 生成的字符(唯一值得担心的例外是 IBM 生锈的铁,您可能会遇到 EBCDIC)。你可以从cin 读到它就好了。不需要按“回车”部分需要超越 ISO C++。
  • 这篇文章可能对你有帮助,看起来很相似 [StackOverflow][1] [1]: stackoverflow.com/questions/17174849/…

标签: c++ exit cin


【解决方案1】:

在 Windows 中,您可以使用 Windows API 来实现。 GetAsyncKeyState(VK_ESCAPE) 帮助您检查是否按下了 Escape。你可以试试这样的:

#include <windows.h>
#include <iostream>

using namespace std;

int main() {

  int Element[15];
  HANDLE h;

  do {  
    h = GetStdHandle(STD_INPUT_HANDLE);
    if(WaitForSingleObject(h, 0) == WAIT_OBJECT_0) {
      cout << "Enter name/symbol of the Element: ";
      cin >> Element;
    }
  } while(GetAsyncKeyState(VK_ESCAPE)==0);

  return 0;
}

我遇到了同样的问题,并以上面的方式解决了。这个问题对我帮助很大(处理思路来自公认的答案):C++ how do I terminate my programm using ESC button。该链接的问题答案中还提供了针对此问题的另一种解决方案。

这种检测 Esc 键的方法应该也可以(但是,我没有正确测试它):

#include <iostream>
#include <conio.h>
#include <ctype.h>

using namespace std;

int main() {
  int c = _getcha();
  while(c != 27) {
    // do stuff
    c = _getcha();
  }

  return 0;
}

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多