C++ 在不按 return (Mac OS X 的情况下读取用户输入,与 Turbo Pascal 中的 readkey 相同

C++ read user input without pressing return (Mac OS X), same as readkey in Turbo Pascal

我看过很多关于这个的帖子,但是 none 他们回答了这个问题,他们给出了不起作用的例子,你得到的只是更多的错误信息,或者只是在其他切线处发送。 ncurses 不断被提及 none 我发现在 OS X 上工作的示例,尽管有声明。这些示例要么是错误的,要么在发布之前没有经过实际测试。我会在这些帖子中添加评论,但由于我是新用户,我不能就它们提出任何问题,这也很荒谬,因为这比开始一个新主题要容易得多。

我想让程序问一个问题,等待用户输入并在不按下 return 键的情况下读取每个按下的键,几年前我相当精通 Turbo Pascal,这很容易像 Pascal 中的大多数事情一样,它会起作用......我认为 C++ 会类似,相反你只是不断地面对相反的平台特定用例,以及永远不会编译的例子。

我在 OS X 上使用 CLion 2017.2.2。

这是 ncurses 的示例代码。我在 linux 下测试了它,但它也应该在 mac os 下工作。

#include <stdlib.h>
#include <stdio.h>
#include <curses.h>


int main(void) {
    WINDOW * mainwin;

    if ( (mainwin = initscr()) == NULL ) {
          fprintf(stderr, "Error initialising ncurses.\n");
          exit(EXIT_FAILURE);
    }

    mvaddstr(13, 33, "Input: ");
    refresh();
    char input[2];
    input[0] = getch();
    input[1] = '[=10=]';
    mvaddstr(15, 33, "Your Input is: ");
    mvaddstr(15, 48, input);
    mvaddstr(17, 33, "Press any key to exit");
    getch();

    delwin(mainwin);
    endwin();
    refresh();

    return EXIT_SUCCESS;
}

有必要link对抗ncurses。我使用 cmake 来管理我的构建:

cmake_minimum_required(VERSION 3.5)
project(ncurses)
set(CMAKE_CXX_STANDARD 11)

set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Wextra")

find_package(Curses REQUIRED)

add_executable(ncurses main.cpp)
target_link_libraries(ncurses ${CURSES_LIBRARIES})