在C+中读取带有ncurses的字符串+; 我正在用C++编写一个基于文本的游戏。在某些时候,我要求用户输入与不同玩家对应的用户名

在C+中读取带有ncurses的字符串+; 我正在用C++编写一个基于文本的游戏。在某些时候,我要求用户输入与不同玩家对应的用户名,c++,string,ncurses,C++,String,Ncurses,我目前正在阅读ncurses中的单个字符,如下所示: move(y,x); printw("Enter a char"); int char = getch(); 但是,我不知道如何使用字符串。我要找的东西是: move(y,x); printw("Enter a name: "); std::string name = getstring(); 我看过许多不同的使用ncurses的指南,它们都使用了另一个没有的一组不同的函数。据我所知,不推荐使用的函数和不推荐使用的函数之间的界限定义得不是

我目前正在阅读ncurses中的单个字符,如下所示:

move(y,x);
printw("Enter a char");
int char = getch();
但是,我不知道如何使用字符串。我要找的东西是:

move(y,x);
printw("Enter a name: ");
std::string name = getstring();
我看过许多不同的使用ncurses的指南,它们都使用了另一个没有的一组不同的函数。据我所知,不推荐使用的函数和不推荐使用的函数之间的界限定义得不是很好。

这是怎么回事

std::string getstring()
{
    std::string input;

    // let the terminal do the line editing
    nocbreak();
    echo();

    // this reads from buffer after <ENTER>, not "raw" 
    // so any backspacing etc. has already been taken care of
    int ch = getch();

    while ( ch != '\n' )
    {
        input.push_back( ch );
        ch = getch();
    }

    // restore your cbreak / echo settings here

    return input;
}
std::string getstring()
{
std::字符串输入;
//让终端进行行编辑
nocbreak();
回声();
//这将在之后从缓冲区读取,而不是“原始”
//因此,任何退格等都已得到处理
int ch=getch();
而(ch!='\n')
{
输入。推回(ch);
ch=getch();
}
//在此处恢复您的cbreak/echo设置
返回输入;
}
我不鼓励使用替代的
*scanw()
函数族。您可能需要处理一个临时的
char[]
缓冲区、底层的
*scanf()
功能及其所有问题,再加上
*scanw()
的规范声明它返回
ERR
OK
而不是扫描的项目数,这进一步降低了它的有用性


<> > <代码> GETScript()/Cux>(用户IDEV建议)看起来比 * SCANW()/Cux>好,并且对函数键进行特殊处理,它仍然需要临时的<代码> char []/Cord>,并且我尽量避免C++代码中的那些,如果我们不使用
UTF-8
,那么您的代码就可以工作。我注意到,当我们使用
ch=getch()然后
输入。向后推(ch)收入实际上不是1个字符,而是2个字符。当我们退场时,他们会一个接一个地删除。我的意思是要删除屏幕上的1个字符,我们必须按两次
del
按钮。如何修复它?@AndrewKusachev:nwcurses是ncurses的宽字符扩展。我正在使用
-lncursesw
标志编译您的代码,但仍然是相同的错误:2次按
del
删除图表这很有趣,因为
getstr()也有这个问题。我正在用俄语测试它。@AndrewKusachev:在这方面我帮不了你;我只为一个单独的个体经营者项目涉猎了ncurses课程,从此再也没有接触过lib。