C++ ncurses:奇怪的行格式

C++ ncurses:奇怪的行格式,c++,ncurses,C++,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 alo

我有以下代码用于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;
}
#包括
#包括
#包括
#包括
#包括
//字符a='a';
int c=0;
bool-ex=假;
void mva()
{

std::cout当程序调用
initscr
时,ncurses(实际上任何curses实现)初始化终端模式,以允许自己打印回车和换行(“换行”)。打印换行不会产生回车

但是iostream的
endl
只是一个换行符。当您以这种方式打印到
cout
时,您将看到楼梯

使用诅咒时,
cout
cin
并不是真正有用的。使用
getch
(或
wgetch
)读取输入。此外,使用诅咒
echo
(或
noecho
)控制这些是否回显您给
getch
的输入。诅咒
回显
cin
没有影响(终端同样被设置为不回显输入,诅咒知道何时回显)

进一步阅读:


您发布的代码与您的屏幕截图不匹配。正如Jesper所说,您的代码中没有任何内容指示打印这些文字。@DistantGraphics这是完全相关的,因为如果您显示的代码不是导致问题的代码,则该代码与问题无关。您需要显示导致您提出问题的代码直接在这里发布代码。代码永远不应该链接到。如果链接断开,这个问题对未来的用户来说几乎毫无用处。“我严重怀疑你是否想筛选96行代码”-这就是为什么在提出问题之前应该始终构造一个。因此,如果我的程序使用标准的std::cout和std::endl,那么如何使用ncurses获得非阻塞键输入?请查看和。