首页 > 解决方案 > 在字符串末尾使用退格符

问题描述

退格转义字符 '\b' 用于将光标带回一个字符......所以它必须像我们键盘上的退格键一样工作。

cout<<"Learn c++\b!";

这给出了正常的预期结果 - 学习 c+!

但是当使用 \b 作为最后一个字符时

cout<<"Learn c++!\b";

这 '!' 不擦除输出——学c++!

相反,我必须使用

cout<<"Learn c++!\b \b";

得到输出-Learn c++

谁能说出这种行为的原因..?

标签: c++stringcharacter

解决方案


你的假设:

所以它必须像退格键一样工作

是不正确的。\b将光标向后移动一个字符。它不会删除任何字符。在导致您观察到的效果的交互式终端中。

std::cout << "Hello, world\b!\n";

这从打印 开始Hello, world,然后将光标向左移动 1 步,然后打印!并移动到新行,结果是Hello, worl!

std::cout << "Hello, world!\b\n";

这从打印 开始Hello, world!,然后将光标向左移动 1 步,然后移动到新行,结果为Hello, world!

正如问题评论已经提到的那样,这种覆盖效果只发生在终端中。如果您输出到一个文件,包括 在内的所有字符\b都将按原样保留。


推荐阅读