ncurses: странное форматирование строк


У меня есть этот код для работы с ncurses:

#include <iostream>
#include <string>
#include <fstream>
#include <ncurses.h>
#include <cstdlib>

//char a='a';
int c=0;

bool ex = false;

void mva()
{
    std::cout << "Nothing here yet, move along." << std::endl;
}

void cho()
{
    std::cout << "Choose a valid option noob!" << std::endl;
}

void menu()
{
    std::cout << "Welcome." << std::endl;
    std::cout << "Choose an option" << std::endl;
    std::cout << "1." << std::endl;
    std::cout << "2." << std::endl;
    std::cout << "3." << std::endl;
    std::cout << "4. About" << std::endl;
    std::cout << "5. exit" << std::endl;
}

void pause()
{
    std::cin.get();
    std::cin.ignore();
}

int main()
{
    initscr();
    //clear();
    refresh();
    //system("clear");
    while (ex != true)
    {
        menu();
        std::cin >> c;
        switch (c)
        {
            case 1:
                mva();
                pause();
                system("clear"); //unfortunately, there is no clean variant to this :(
            break;

            case 2:
                mva();
                pause();
            break;

            case 3:
                mva();
                pause();
            break;

            case 4:
                std::cout << "About" << std::endl;
                std::cout << "Programmed by nnmjywg." << std::endl;
                pause();
            break;

            case 5:
                std::cout << "Press enter to exit" << std::endl;
                pause();
                ex = true;
            break;

            default:
                cho();
                pause();
            break;
        }
    }
    endwin();
    return 0;
}
Он должен работать нормально, но я совершенно сбит с толку, когда вижу это странное форматирование строки. Кроме того, я также не могу видеть, что я ввожу (с std::cin) Странное форматирование строк
1 2

1 ответ:

Когда ваша программа вызывает initscr, ncurses (фактически Любая реализация curses) инициализирует терминальные режимы, чтобы позволить печатать возврат каретки и перевод строки ("newline") сами по себе. Печать строчной подачи не приведет к возврату каретки.

Но iostream endl это просто линия подачи. При печати на cout таким образом, вы увидите лестничный.

При использовании проклятий cout и cin не очень полезны. Используйте getch (или wgetch) для чтения вход. Кроме того, используйте проклятия echo (или noecho), чтобы контролировать, повторяют ли они вход, который вы даете getch. Проклятия echo не влияют на cin (терминал также был настроен на не Эхо вход, и проклятия знают, когда эхо).

Дальнейшее чтение: