如何在编辑输入后编辑用户看到的输入内容?
问题描述:
像下面接受输入,如何在编辑输入后编辑用户看到的输入内容?
char ch = getch();
while(ch != '\r') {
if(ch == '\b') {
// do **something** here to remove the previous character from the stream
} else {
cout << ch;
}
}
我理解的流是用于插入和提取数据。
这是否意味着一旦一些数据被发布到流中就会变得不可变?
答
I/O库中有一个缓冲区,位于进程和最终从终端或磁盘或某个其他设备读取的OS /内核级系统调用之间。
一旦你的进程从I/O库中获得字节,你可以将它存储在一个数组中,然后你可以在你的字节数组上实现'\ b'的行为。
因此,每个字节都会经过从设备到I/O库的缓冲区的管道线到您的进程中的缓冲区。您可以在流程的最后一个阶段实现撤销类型行为,管道的前几个阶段现在是历史记录,您无法更改历史记录。
您可以使用ungetc将已读取的字节推送回I/O库的缓冲区,稍后可以再次读取该缓冲区,但似乎与您的问题相符。