使用getline(cin,mystrvar)读取用户输入时,某些控制键不起作用。

例:

User input: abc^[[Dd
Text: abd
User input: asc
Read bytes: 7
#0: 97
#1: 98
#2: 99
#3: 27
#4: 91
#5: 68
#6: 100

我输入a,b,c,然后按向左箭头和d。
“文本:”显然是写(出)前三个字符,然后将指针设置在左侧并覆盖c。
“asc”是一个简单的函数,可以打印长度(mystrvar.size())和ascii值。

调用“stty -ctlecho”(system(...))时,我可以使用向左箭头键,但它不仅限于我的输入(我可以覆盖“User input:”),而且控制代码是仍被发送到我的程序。

在Windows上不会发生这种情况-我可以正常使用箭头键(即使在历史记录中也使用向上/向下键)。

怎么了

编辑:我主要使用Fedora15。lxterminal,terminal,xterm,konsole,gnome-terminal(作为终端)或bash,ksh,tcsh(作为shell)之间似乎没有什么区别。

最佳答案

这些键的工作方式是终端的属性,而不是c++程序的属性。程序将输入行缓冲,然后由您的终端负责组装该行。

10-07 19:08
查看更多