C++ 如果我得到任何字符,退出程序

C++ 如果我得到任何字符,退出程序,c++,terminal,getchar,C++,Terminal,Getchar,我正在创建一个程序,如果按下任何键,我想退出该程序。 到目前为止,我只能在按下return时这样做,因为getch需要按下return 代码: #包括 #包括 #包括 #包括 静态void*breaknret(void*instance); int main(){ pthread_t mthread; pthread_create(&mthread,NULL,breaknret,NULL); 而(1){ printf(“屏幕上的数据”); 睡眠(1); } } 静态void*breaknret(

我正在创建一个程序,如果按下任何键,我想退出该程序。 到目前为止,我只能在按下return时这样做,因为getch需要按下return

代码:

#包括
#包括
#包括
#包括
静态void*breaknret(void*instance);
int main(){
pthread_t mthread;
pthread_create(&mthread,NULL,breaknret,NULL);
而(1){
printf(“屏幕上的数据”);
睡眠(1);
}
}
静态void*breaknret(void*instance){
getchar();
出口(0);
}
(我将问题从
getch
重新标记为
getchar
,因为它们是两个不同的东西)

正如您所注意到的,
getchar
在返回之前等待按下回车键。如果希望在按下任何键后立即返回,则需要使用不同的功能。在Windows上,有一个名为
getch()
的内置函数,该函数在
中定义。在POSIX平台(例如Linux、OS X)上,没有内置的
getch()
,但您可以这样编写自己的版本(从):

#包括
int getch()
{
结构termios oldt,
蝾螈;
int-ch;
tcgetattr(标准文件号和旧文件号);
newt=oldt;
newt.c|lflag&=~(ICANON | ECHO);
tcsetattr(标准文件号、TCSANOW和NETT);
ch=getchar();
tcsetattr(标准文件号、TCSANOW和oldt);
返回ch;
}

两条评论:首先,你需要把它包括进去,这样才能起作用。其次,这应该适用于任何POSIX平台(包括OSX),而不仅仅是Linux。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
static void * breakonret(void *instance);
int main(){
  pthread_t mthread;
  pthread_create(&mthread, NULL, breakonret, NULL);
  while(1){
    printf("Data on screen\n");
    sleep(1);
  }
}
static void * breakonret(void *instance){
  getchar();
  exit(0);
}
#include <termios.h>

int getch( ) 
{
  struct termios oldt,
                 newt;
  int            ch;
  tcgetattr( STDIN_FILENO, &oldt );
  newt = oldt;
  newt.c_lflag &= ~( ICANON | ECHO );
  tcsetattr( STDIN_FILENO, TCSANOW, &newt );
  ch = getchar();
  tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
  return ch;
}