结论
简单地说,用 \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 也没法退掉换行符。