【C#】控制台输出中\r和\r\n的区别
今天在用程序收发数据的时候,发现接收的数据首行未在控制台中输出,但是日志中记录的是完整的,查看日志,发现输出的文本中夹杂着一个 \r ,当时很奇怪,为什么没有换到下一行输出,而是这 \r 前的文本 "不见了"?
后来查了查,发现 \r 和\r\n 还是有区别的,\r 和 \n 分别代表回车(Carriage Return)和换行(Newline)字符
\n(Newline):将光标移动到下一行的开始位置。\r(Carriage Return):将光标的水平位置移回到当前行的开始位置,但垂直位置不变。
当使用 aaaa\r\nbbbb 输出时:
- 首先输出
aaaa。 \r将光标移回到行首,但这不会擦除已有的文本。\n将光标移到下一行的开始位置。- 接着输出
bbbb,在新的一行。
因此,你会看到:
aaaa
bbbb
而当使用 aaaa\rbbbb 输出时:
- 首先输出
aaaa。 \r将光标移回到行首,此时光标位于aaaa的前面。- 然后输出
bbbb,因为光标在行首,bbbb会覆盖掉原来的aaaa。
因此,最终你会只看到:
bbbb
这是因为 bbbb 覆盖了原先 aaaa 所在的位置,而没有换行发生,所以屏幕上只显示了 bbbb。所以,看起来就感觉是 \r 前面的文本 "消失了"!
这种技术常用于更新控制台中的进度条或者动态更新某一行的文本,因为不需要输出整个新行,而是原地替换文本。
最后我们来验证一下,这次我们输出aaaa\rbbb
这个字符串比上面的文本少一个字节,最后输出为:
bbba

果然,前面三个字节被新字节替换,后面的第四字节依旧保留。

浙公网安备 33010602011771号