在C ++中用ncurses读取一个字符串

时间:2014-11-13 23:16:07

标签: c++ string ncurses

我正在用C ++编写基于文本的游戏。在某些时候,我要求用户输入与不同玩家相对应的用户名。

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

move(y,x);
printw("Enter a char");
int char = getch();

但是,我不确定如何使用字符串。我正在寻找类似的东西:

move(y,x);
printw("Enter a name: ");
std::string name = getstring();

我已经看到许多使用ncurses的不同指南,所有这些指南都使用另一组不同的功能。据我所知,已弃用和未弃用的函数之间的界限定义不明确。

1 个答案:

答案 0 :(得分:6)

这个怎么样?

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;
}

我不鼓励使用替代的*scanw()函数系列。您将处理临时char []缓冲区,基础*scanf()功能及其所有问题,以及*scanw()状态返回ERROK的规范扫描的项目数量,进一步降低其实用性。

虽然getstr()(由用户个人建议)看起来比*scanw()更好并且对功能键进行了特殊处理,但它仍然需要一个临时的char [],我尽量避免使用C ++代码,如果只是为了避免一些任意的缓冲区大小。