gpt4 book ai didi

c++ - 在 C++ 中将退格键与 endl 和\n 一起使用

转载 作者:太空狗 更新时间:2023-10-29 23:20:26 26 4
gpt4 key购买 nike

我写了一个小的 C++ 程序来理解 \b 的用法。该程序如下 -

#include <iostream>
using namespace std;
int main(){
cout << "Hello World!" << "\b";
return 0;
}

因此,该程序给出了所需的输出 Hello World。这不应该发生,因为退格键只会将光标向后移动一个空格,而不是将其从缓冲区中删除。所以,为什么 ! 没有打印出来?

现在,考虑另一个程序-

#include <iostream>
using namespace std;
int main(){
cout << "Hello World!" << "\b";
cout << "\nAnother Line\n";
return 0;
}

所以,这里的输出是 -
Hello World !
另一条线
为什么退格键在这里不起作用?换行符不应该刷新缓冲区,所以 ! 应该被删除。这里有什么问题?

此外,当我在 \b 之后添加 endl\n 时,在这两种情况下,输出都是 Hello World!。但是,换行符不会刷新缓冲区,而 endl 会刷新缓冲区。那么,两种情况下的输出如何相同?

最佳答案

我假设您的第一个程序的输出看起来像这样?

$ ./hello
Hello World$

如果是这样,! 不会从缓冲区中删除;当 shell 打印提示时,它被破坏了。

关于第二个程序,何时刷新缓冲区只影响 \b 何时发送到终端,而不影响它的处理方式。 \b 是流的一部分,终端恰好将其解释为“备份一列”。如果不清楚,请查看发送到 stdout 的实际字节数:

$ ./hello2 | hexdump -C
00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 08 0a 41 6e |Hello World!..An|
00000010 6f 74 68 65 72 20 4c 69 6e 65 0a |other Line.|
0000001b

\b 之后是 \n(分别为 080a),匹配您的内容在你的程序中写入 cout

最后,当程序退出时,cout 被刷新,所以在这个例子中你传递的是 \n 还是 endl 并不重要。事实上,\n 可能无论如何都会刷新,因为 stdout 已连接到终端。

关于c++ - 在 C++ 中将退格键与 endl 和\n 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39749151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com