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

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

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

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

1 Ответ

0 голосов
/ 19 октября 2018

Вот пример кода для 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})
...