sunshine770880 发表于 2020-8-3 20:45:50

关于c语言s1e3的课后作业举一反三的疑问

1的是退格五次,五个前面的都退没了我可以理解,不过为啥我把退格五次移到后面的时候,就只退了前面倒数第五个字符而已,而不是像第一次那样退五次

baige 发表于 2020-8-3 20:49:49

本帖最后由 baige 于 2020-8-3 21:53 编辑

\b将输出位置左移一位,后面有对应的字符就覆盖掉前面的吧,没有就保持原样
对于你的第二个程序,5个\b让光标到F接着输出空格,后面由于没有字符去覆盖,所以保持原样
转义字符 '\r '和 '\b '的作用都是实现光标的移动,从而改变控制台的输出位置。 虽然它们并不能直接清除某一行或一个信息,但是我们可以通过空字符对之前信息的覆盖,进而在视觉上达到清除信息的效果。除了清除信息,它们还可以实现覆盖刷新等其他功能。

SHRS23 发表于 2020-8-4 13:33:46

\b 字符是输出设备控制字符,意思是“回退”或者“退格”,而不是通常所理解的“删除”

程序输出时就像我们打字一样,总是在光标位置输出,每输出一个正常字符,光标向右移动一次,下一个字符继续在光标位置输出

而\b的作用是每输出一次\b,光标回退一个位置,但是已经输出的内容还在,此时如果继续输出正常字符,那还是会在光标位置输出

这时光标位置的原字符会被替换成新字符

拿第二个举例子,下划线位置就是光标当前位置

输出字符串:“hello world fishc\b\b\b\b\b \n”
正常输出:“hello world fishc ”
然后输出5个\b:“hello world fishc”
\b后面是一个空格:“hello worldishc”

最后一个字符是换行符,注意这里换行符的作用和键盘上的enter回车键不同
换行符\n和退格\b一样属于输出设备控制字符,简单理解就是控制光标位置的字符
输出\n时会把光标直接挪到下一行所以最终的输出结果就是:

============
“hello worldishc”
<空行>
============

sunshine770880 发表于 2020-8-4 20:00:18

謝謝大佬們
页: [1]
查看完整版本: 关于c语言s1e3的课后作业举一反三的疑问