c++循环直到击键

C++ loop until keystroke

本文关键字:循环 c++      更新时间:2023-10-16

如果我想循环直到击键,有一个很好的Windows解决方案:

while(!kbhit()){ 
    //...
}

但这既不是ISO-Function也不能在除MS Win以外的其他操作系统上工作。我找到了其他的跨平台解决方案,但它们相当令人困惑和臃肿——难道没有另一种简单的方法来管理这个吗?

不,c++标准没有定义像'键盘'和'击键'这样的概念,因为不是所有的系统都有这样的东西。使用便携式库,也许护士应该有一些东西。

您可以在*nix操作系统上使用下一个版本的kbhit():

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int kbhit(void)
{
  struct termios oldt, newt;
  int ch;
  int oldf;
  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
  fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
  ch = getchar();
  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  fcntl(STDIN_FILENO, F_SETFL, oldf);
  if(ch != EOF)
  {
    ungetc(ch, stdin);
    return 1;
  }
  return 0;
}