c++ - OS X - if 语句中的按键

标签 c++ macos

我对 C++ 编程和将 Mac 用作计算机还很陌生。 我已经在互联网上搜索了一段时间,但仍然找不到解决我问题的好方法。

我正在用键盘箭头制作一个项目,但我不知道如何在 if 语句中制作按键功能。

所以我正在寻找的解决方案是:

if (up arrow is pressed) {
    std::cout << it worked! << std::endl;
}

信息: LLVM 编译器、Xcodes 命令行工具、Unix、OS X-Sierra 感谢您的帮助。

最佳答案

好吧,我无法让其他答案中的代码正常工作,不确定有什么不同,因为我也在运行 Sierra。但我将其转换为使用 tcsetattr。该调用的目的是将终端置于原始模式,以便它直接发送按键。如果你不这样做,它不会发送任何东西,直到你按下 enter。

#include <stdio.h>
#include <termios.h>
#include <unistd.h>

static struct termios savemodes;
static int havemodes = 0;

int tty_break(void)
{
    struct termios modmodes;
    if (tcgetattr(STDIN_FILENO, &savemodes) < 0)
        return -1;
    havemodes = 1;
    modmodes = savemodes;
    cfmakeraw(&modmodes);
    return tcsetattr(STDIN_FILENO, TCSANOW, &modmodes);
}

int tty_getchar(void)
{
    return getchar();
}

int tty_fix(void)
{
    if(!havemodes)
        return 0;
    return tcsetattr(STDIN_FILENO, TCSANOW, &savemodes);
}

int
main(int argc, char *argv[])
{
    int i;
    if(tty_break() != 0)
        return 1;
    for(i = 0; i < 10; i++)
        printf(" = %d\n", tty_getchar());
    tty_fix();
    return 0;
}

关于c++ - OS X - if 语句中的按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43834478/

相关文章:

c++ - 自动将一种 C++ 类型转换为另一种

c# - 使用 C++ dll 运行 C# 应用程序生成无法加载异常

c++ - 如何设置 QDialog 在 exec() 方法上不可见?

java - 如何设置全屏vlcj直接渲染播放器?

Eclipse - 缺少 Mac Os 默认 JRE

c++ - g++ 内联 asm 无法按预期使用优化标志

c++ - 双冒号前的 clang 格式中断

macos - 在 Mac 上从 llvm-g++-4.2 升级到 g++-4.7 的正确方法

macos - 核心视频像素缓冲区为 GL_TEXTURE_2D

objective-c - 使用 Swift 或 Objective C 从事件的 Firefox session 中获取 URL