C语言中\b的作用

对于\b,起初,我在c primer plus中看到,\b解释为退格,代表backspace,退格键,但经过我的测试,其实这个退格键和键盘上的backspace不一样,并不会删除文本,而是移动光标的位置作用。

如下面这段程序

#include<stdio.h>
int main()
{
	printf("12345\b");
}

结果是

12345

所以\b没有像键盘上的一样,是往左删除文字

而下面这个程序

#include<stdio.h>
int main()
{
	printf("12345\ba");
}

会输出

1234a

因此光标从5的右边一格向左移动一格到了5处,再输出a,而光标此时在5处,故占用这个位置,用a把5给覆盖了。
注意:在输出完12345后,光标在5右边,因为输出完5,光标自然往右移动一格

对于多个\b同理,移动光标位置,从移动后的光标位置处输出\b后面的内容。

#include<stdio.h>
int main()
{
	printf("12345\b\b\b\babc");
}

输出

1abc5

对于汉字,字母,数字,一个均只占一格位置,计算机对\b的处理都是一样的,均和上述同理

另外,如果\b前面出现的\n换行符,则要注意一下。

注意:发生换行后,是不能退格到上一行的

#include<stdio.h>
int main()
{
	scanf("%d");
	printf("\n");
	scanf("%d");
}

如上面的程序,在输入一个数字后发生换行,而此时想要在键盘上按退格回到上一行,是不行的,光标会停留在换行后的这一行。(同学们可以自己试试看,确实如此)

因此

如果仅是

#include<stdio.h>
int main()
{
	printf("1234\n5");
}

则会输出

1234
5

故退格只能发生在含5的这一行中,而不能退格回到上一行,光标只能停留在5这里

所以对于这个程序

#include<stdio.h>
int main()
{
	printf("1234\n5\b\b\b\babc");
}

会输出

1234
abc

最后总结一下:\b在C程序中是向左移动光标的作用,而不是键盘上的退格,并且如果\b左边有\n,则要考虑换行后不能退格回到上一行,只能留在本行的问题。

PS:评论区有指出在 VS 中 \b 是向左边删除一个字符的作用,笔者测试后发现在 Ubuntu18.04 中使用 gcc 编译 12345\b 确实同样只是 1234,如下图:
在这里插入图片描述
但是如果在 \b 的后面再加上一个 \n 就会输出 12345【\t 同理】,如下:
在这里插入图片描述
可见在 VS 中 \b 也不是删除的作用。
但具体原理笔者没有搞清楚,应该要分析 printf 源码机制,有理解的大佬欢迎评论区指出!

  • 64
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值