在C+中使用带endl和\n的退格符+; 我编写了一个小型C++程序,了解 \b/COD>的用法。计划如下: #include <iostream> using namespace std; int main(){ cout << "Hello World!" << "\b"; return 0; }
所以,这里的输出是-在C+中使用带endl和\n的退格符+; 我编写了一个小型C++程序,了解 \b/COD>的用法。计划如下: #include <iostream> using namespace std; int main(){ cout << "Hello World!" << "\b"; return 0; },c++,escaping,backspace,C++,Escaping,Backspace,所以,这里的输出是- 你好,世界! 另一行 为什么退格在这里不起作用?换行符不应刷新缓冲区,因此应该删除。这里有什么问题 另外,当我在\b之后添加endl或\n时,在这两种情况下,输出都是Hello World。但是,换行符不刷新缓冲区,而endl刷新缓冲区。那么,在这两种情况下,输出是如何相同的呢?我假设您的第一个程序的输出是这样的 $ ./hello Hello World$ 如果是,请输入未从缓冲区中删除;当shell打印提示时,它将被删除 对于第二个程序,刷新缓冲区的时间只影响\
你好,世界!
另一行
为什么退格在这里不起作用?换行符不应刷新缓冲区,因此代码>应该删除。这里有什么问题
另外,当我在\b
之后添加endl
或\n
时,在这两种情况下,输出都是Hello World
。但是,换行符不刷新缓冲区,而endl
刷新缓冲区。那么,在这两种情况下,输出是如何相同的呢?我假设您的第一个程序的输出是这样的
$ ./hello
Hello World$
如果是,请输入代码>未从缓冲区中删除;当shell打印提示时,它将被删除
对于第二个程序,刷新缓冲区的时间只影响\b
发送到终端的时间,而不影响其处理方式。\b
是流的一部分,终端恰好将其解释为“备份一列”。如果不清楚,请查看发送到标准输出的实际字节:
\b
后面紧跟着\n
(08
和0a
),与您在程序中写入的cout
相匹配
最后,当程序退出时,cout
将被刷新,因此在本例中,您是通过\n
还是通过endl
并不重要。实际上,\n
很可能会刷新,因为stdout连接到终端。您有两个错误的假设:.1。“这不应该发生,因为退格仅将光标向后移动一个空间…”。2.“但是,换行符不会刷新缓冲区…”后者取决于实现。当程序退出时,控制台可能会打印一条覆盖“!”的提示。当程序退出时,cout
也会被刷新。\b
的工作原理与C++
无关<代码>C++
将您告诉它的所有字符发送到控制台(或它碰巧连接到的任何其他地方)。控制台的行为取决于控制台。因此@πάνταῥεῖ, 可以使用\n
刷新缓冲区吗?您没有刷新缓冲区。更好的选择是使用PrimTf,或者考虑::STD::CURR,因为当打印某些东西时它会被刷新。
$ ./hello
Hello World$
$ ./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