输入后如何编辑用户看到的内容?
How can I edit what the user sees of their input after it has been entered?
正在接受如下输入,
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/Kernel 级系统调用之间,最终从终端或磁盘或其他设备读取。
一旦您的进程从 I/O 库中获取字节,您可以将其存储在一个数组中,然后您可以在您的字节数组上实现 '\b' 的行为。
因此,每个字节都经过一条缓冲区管道,从设备到 I/O 库,再到您进程中的缓冲区。您可以在流程中的管道的最后阶段实现撤消类型行为,管道的先前阶段现在已成为历史,您无法更改历史。
您可以使用 ungetc 将您已读取的字节推送回 I/O 库的缓冲区,稍后可以再次读取,但这似乎与您的问题无关。
正在接受如下输入,
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/Kernel 级系统调用之间,最终从终端或磁盘或其他设备读取。
一旦您的进程从 I/O 库中获取字节,您可以将其存储在一个数组中,然后您可以在您的字节数组上实现 '\b' 的行为。
因此,每个字节都经过一条缓冲区管道,从设备到 I/O 库,再到您进程中的缓冲区。您可以在流程中的管道的最后阶段实现撤消类型行为,管道的先前阶段现在已成为历史,您无法更改历史。
您可以使用 ungetc 将您已读取的字节推送回 I/O 库的缓冲区,稍后可以再次读取,但这似乎与您的问题无关。