问题描述
我写了一个简单的类似FORTH的解释器,每次输入一行并按如下处理:
std::string line;
while (!std::cin.eof()) {
std::getline(std::cin,line);
std::istringstream input(line);
std::copy(std::istream_iterator<std::string>(input),std::istream_iterator<std::string>(),std::back_inserter(data.input_));
// some work
}
如果我输入5 5 + . <enter>
,则显示如下:
5 5 + .
10 ok
但是我想要显示的是:
5 5 + . 10 ok
换句话说,应该接受换行符来表示行尾输入,但不应回显到std :: cout。
已经阅读了一些文章,看来我将无法在std c ++中实现这一目标(是真的吗?),但是我可以使用termios库中的函数以这种方式在POSIX系统上设置控制台,而不会引起混乱其他控制台功能,例如ctl-c处理等。我还没有弄清楚具体如何。谁能给我指路?
解决方法
您可以使用VT100转义序列来自定义控制台输出(VT100 ESC SEQUENCES)。在这种情况下;
将\033[1A
用于第1行,\033[nC
(n是int值)使第n个字母向右