首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按键时停止C++中的无限循环

按键时停止C++中的无限循环
EN

Stack Overflow用户
提问于 2014-02-12 01:16:04
回答 4查看 4.8K关注 0票数 1

我有一个程序,如下所示:

代码语言:javascript
复制
#include<iostream>
using namespace std;
int main()
{
    while(true)
    {
        //do some task
        if(Any_key_pressed)
            break;
    }
return 0;
}

如果按下任何键,如何退出循环。

代码语言:javascript
复制
C++ Compiler: GCC 4.2 and higher
OS: Linux-Mint

谢谢

EN

回答 4

Stack Overflow用户

发布于 2014-02-12 01:18:12

标准C++不提供这样做的方法。您将需要一个特定于平台的API来告诉您某个键是否被按下(或者输入可能在stdin上可用),而不会阻塞。这意味着你需要告诉我们你使用的是哪种平台。

票数 3
EN

Stack Overflow用户

发布于 2014-02-12 01:45:49

试试这个:

代码语言:javascript
复制
#include <iostream>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>

using namespace std;

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;
}

int main(void)
{

  while(!kbhit());

  cout<<"You pressed "<<(char)getchar();

  return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2014-02-12 03:12:43

您可以使用SDL,它(大部分)是独立于平台的。

代码语言:javascript
复制
#include<SDL/SDL.h>
...
#include<iostream>
using namespace std;
int main()
{
    while(true)
    {
        //do some task
        SDL_Event event
        while(SDL_PollEvent(&event))
        {
            if(event.type==SDL_KEYDOWN)
            {
                break;
            }
        }
    }
return 0;
}

上面的代码适用于Windows,Linux,MacOS以及其他一些OSes。至于如何设置SDL,有一个tutorial

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21708564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档