我正在用C ++编写基于文本的游戏。在某些时候,我要求用户输入与不同玩家相对应的用户名。
我目前正在从ncurses中读取单个字符,如下所示:
move(y,x);
printw("Enter a char");
int char = getch();
但是,我不确定如何使用字符串。我正在寻找类似的东西:
move(y,x);
printw("Enter a name: ");
std::string name = getstring();
我已经看到许多使用ncurses的不同指南,所有这些指南都使用另一组不同的功能。据我所知,已弃用和未弃用的函数之间的界限定义不明确。
答案 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()
状态返回ERR
或OK
的规范扫描的项目数量,进一步降低其实用性。
虽然getstr()
(由用户个人建议)看起来比*scanw()
更好并且对功能键进行了特殊处理,但它仍然需要一个临时的char []
,我尽量避免使用C ++代码,如果只是为了避免一些任意的缓冲区大小。