C++ читает пользовательский ввод без нажатия клавиши возврата (Mac OS X), так же, как кнопка чтения в Turbo Pascal

Я видел много постов по этому поводу, но ни один из них не ответил на вопрос, они приводят примеры, которые не работают, все, что вы получаете, - это больше сообщений об ошибках или просто отсылаемых по другим касательным. ncurses постоянно упоминается, но ни один из примеров, которые я нашел, не работал на OS X, несмотря на претензии. Либо примеры неверны, либо они на самом деле не проверены перед публикацией. Я хотел бы добавить комментарий к этим сообщениям, но, поскольку я новый пользователь, мне не разрешается спрашивать о них что-либо, что также смешно, поскольку это будет гораздо проще, чем начинать новую тему.

Я хочу, чтобы программа задавала вопрос, ждала ввода от пользователя и читала каждую нажатую клавишу без нажатия клавиши возврата, несколько лет назад я был достаточно опытным в Turbo Pascal, и это было так легко сделать, как и большинство вещей в Pascal, будет просто работать... Я думал, что C++ будет похожим, вместо этого вы просто постоянно сталкиваетесь с противоположными платформными примерами использования и примерами, которые никогда не компилируются.

Я использую CLion 2017.2.2 на OS X.

1 ответ

Решение

Вот пример кода для 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] = '\0';
    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;
}

Необходимо связать с 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})
Другие вопросы по тегам