printf("backspace\b");
输出:退格
puts("backspace\b");
输出:退格
为什么是这样?因为puts()
添加了一个终止换行符,\b
因此没有效果?
printf("backspace\b");
在典型的终端或模拟器上,这将打印字符串backspace
,然后将光标移回一个位置,将其留在 final 的顶部e
。如果您看到,那是因为在调用之后发生backspac
了其他事情,或者是因为同一个程序打印了更多的输出(您没有向我们展示),或者是因为程序完成后发生了一些事情。如果这是您的程序中唯一的语句,并且您在类似 Unix 的 shell 中运行,那么 shell 提示符很可能会破坏.e
printf
printf
e
puts("backspace\b");
该函数在其输出中puts
附加一个换行符。'\n'
这相当于
printf("backspace\b\n");
与前面的示例一样,\b
将导致光标在 . 的顶部向后移动一个位置,e
但随后\n'
会使其移动到下一行的开头,这不会破坏e
.
在这两种情况下,退格字符'\b'
都会写入标准输出。如果您运行程序并将输出重定向到文件然后检查该文件,您会看到它,可能显示为十六进制^H
或08
十六进制,具体取决于您如何查看它。
看起来它们都将光标移回了一个位置,但是 puts() 在单词的末尾附加了一个换行符,因此如果您尝试覆盖当前光标,您实际上并没有删除“e”,因为光标已经下降到下一行。
就像有人在评论中说的那样,代码示例会给出更准确和正确的答案。
编辑:从评论来看,似乎将光标移回然后打印一个字符会覆盖这个词,除非那个字符是换行符,否则不会。
printf("backspace\b\n "); // Output: backspace
printf("backspace\b"); // Output: backspac|e (| for cursor)
printf("backspace\b "); // Output: backspac