繁体   English   中英

在DB ++中使用带有endl和\\ n的退格键

[英]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 (分别为080a ),与您在程序中写入cout相匹配。

最后,当程序退出时刷新cout因此在这个例子中是否传递\\nendl无关紧要。 事实上,由于stdout连接到终端, \\n很可能会刷新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM