猿问

“退格”转义字符'\ b':意外行为?

“退格”转义字符'\ b':意外行为?

所以我终于通过K&R阅读,并且我在前几页中学到了一些东西,即有一个退格转义字符\b

所以我去测试它,并且有一些非常奇怪的行为:

#include <stdio.h>main (){
    printf("hello worl\b\bd\n");}

输出是

hello wodl

有谁能解释一下?


开满天机
浏览 674回答 3
3回答

Qyouu

您的结果将根据您所使用的终端或控制台程序类型而有所不同,但是,大多数\b是非破坏性退格。它向后移动光标,但不会删除那里的光标。因此对于该hello worl部分,代码输出你好 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^...(^显示光标所在的位置)然后输出两个\b字符,将光标向后移动两个位置而不擦除(在终端上):你好 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^请注意,光标现在位于r。然后它输出d,覆盖r并给我们:你好wodl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^最后,它输出\n,这是一个非破坏性换行(同样,在大多数终端上,显然包括你的),所以l保持不变,光标移动到下一行的开头。

米琪卡哇伊

..........^&nbsp;<=指向“打印头”的指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;part1&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("hello&nbsp;worl");你好 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;<=指向“打印头”的指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;part2&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\b");你好 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;<=指向“打印头”的指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;part3&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\b");你好 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;<=指向“打印头”的指针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;part4&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("d\n");你好wodl^&nbsp;<=指向下一行“打印头”的指针

慕桂英546537

如果你想要一个破坏性的退格,你需要类似的东西"\b&nbsp;\b"即退格,空格和另一个退格。
随时随地看视频慕课网APP
我要回答