结论

简单地说,用 \b 退格之后不能紧接着换行,无论用什么方式换。

错误示例 1

代码:

cout << "1,2,3,4,5,\b" << endl;

希望输出:

1,2,3,4,5

实际输出:

1,2,3,4,5,

原因:std::endl 在刷新输出缓冲区的时候同时会换一个行。

错误示例 2

代码:

cout << "1,2,3,4,5,\b\n" << "Something else..." << endl;

希望输出:

1,2,3,4,5
Something else...

实际输出:

1,2,3,4,5,
Something else...

原因:用转义字符换行也不行。

正确示例 1

代码:

cout << "I have a pen\b\b\b\bn apple" << endl;

输出:

I have an apple

归纳:在 \b 后面有其他除换行之外的字符,\b 可以正常工作。

正确示例 2

代码:

cout << "1, 2, 3, 4, 5, " << "\b\b " << endl;
// 在 \b\b 后面有一个空格
cout << "Something else..." << endl;

输出:

1, 2, 3, 4, 5
Something else...

归纳:如果需要在一行的末尾用 \b 退去几个字符,则需要在该行最后一个 \b 后面加一个空格(或任意其他字符)。

注意事项

代码:

cout << "This is something.\n\bAnd something else." << endl;
// 在 \b 后面有其他非换行字符(正确的退格方法)

输出:

This is something.
And something else.

说明:即使用前述正确的方法,\b 也没法退掉换行符。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐