Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中使用带endl和\n的退格符+; 我编写了一个小型C++程序,了解 \b/COD>的用法。计划如下: #include <iostream> using namespace std; int main(){ cout << "Hello World!" << "\b"; return 0; }_C++_Escaping_Backspace - Fatal编程技术网

在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