[英]C++ output string without '\n' or endl will output '#' in the end of string
[英]Use of backspace with endl and \n in C++
我写了一个小的C ++程序来理解\\b
的用法。 该计划如下 -
#include <iostream>
using namespace std;
int main(){
cout << "Hello World!" << "\b";
return 0;
}
所以,这个程序给出了所需的输出Hello World
。这不应该发生,因为backspace只将光标向后移动一个空格而不是从缓冲区中删除它。所以,为什么!
没印?
现在,考虑另一个程序 -
#include <iostream>
using namespace std;
int main(){
cout << "Hello World!" << "\b";
cout << "\nAnother Line\n";
return 0;
}
所以,这里的输出是 - Hello World! Another Line
Hello World! Another Line
为什么退格在这里不起作用? 换行不应该刷新缓冲区,所以!
应该删除。这里的问题是什么?
另外,当我在\\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
(分别为08
和0a
),与您在程序中写入cout
相匹配。
最后,当程序退出时刷新cout
因此在这个例子中是否传递\\n
或endl
无关紧要。 事实上,由于stdout连接到终端, \\n
很可能会刷新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.