【问题标题】:How to get key events while running a cpp program in linux?在linux中运行cpp程序时如何获取关键事件?
【发布时间】:2020-11-29 23:49:06
【问题描述】:

我有一个非常简单的程序,它应该打印所有递增的值,直到按下x 键。如果按下x,那么它应该退出程序,否则如果按下a,那么迭代整数应该重置为20;

#include <iostream>

int main() {
    int i;
    while(true){
        
        std::cout<<i<<std::endl;
        if(getchar()==120){
            break;
        }else if(getchar()==122){
            i= 20;
        }
        i++;

    }

    return 0;
}

这里的问题是getchar() 停止循环以获取用户输入。除非按下x,否则我想无休止地运行while循环。我应该如何在linux中做到这一点?有跨平台解决方案吗?

【问题讨论】:

  • 你的 C++ 教科书中的这一章到底在讨论什么?这只能使用非阻塞 I/O 来完成,这不是我希望在 C++ 入门教科书中找到的东西,你必须使用它来学习 C++。
  • 如果您只使用字符输入,如果有要阅读的内容,您应该可以使用peek()ing std::cin,然后读取并处理来自std::cin 的输入。如果您还想使用其他键,则它是高度特定于平台的。我建议使用已经提供抽象的游戏库。

标签: c++ console key keypress onkeypress


【解决方案1】:

首先,如果 i 开头没有值,如何打印它,你应该为它分配 0 或 1。对于不停止循环,您可能必须使用线程才能做到这一点,因为它需要您一次做两件事。

【讨论】:

  • 使用线程可能是一种解决方案,但在这种简单的情况下它是矫枉过正的。使用非阻塞函数可能更容易。您能否添加一个代码示例来演示您的示例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多