赞
踩
目录
\r:回车;
\n:换行;
那么请问这两个有什么区别呢?
比如:我们在编写内容的时候,一行没有写完的情况下,需要换到下一行的开始位置,此时需要两个步骤:
(1)让光标从第一行跳到第二行,但是光标只是垂直向下跳,并没有在第二行的开始。这个操作就是换行(\n)。
(2)在第二行让光标跳到最开始的位置,这个操作就是回车(\r)。
话不多说,我们进行下面的例子,就可以一目了然,
<1>\n和\r都存在
既有回车又有换行,所以执行完命令之后,光标会在下一行的开头。
<2> \n存在
只有换行的时候,我们运行出来和上面第一种情况相同,原因是,在C语言环境下,自动将其简化,此时的\n就表示回车加换行。
<3>\r存在
只有回车,我们可以想象到运行的结果是什么样,答案是:什么都不显示。为什么呢?
- 回车之后,光标来到了文本行的开始位置,此时linux的命令行就会从光标处开始,将我们的文本覆盖掉,我们就什么也看不到。
首先先看看下面3段代码的现象:
- #include <stdio.h>
- #include <unistd.h>
- int main()
- {
- printf("hello world!\n");
- sleep(3);
- return 0;
- }
结果:直接打印出hello world!,然后停留3秒之后换行给出新的命令。
- #include <stdio.h>
- #include <unistd.h>
- int main()
- {
- printf("hello world!");
- sleep(3);
- return 0;
- }
刚开始不显示,停留3秒之后,在一行中显现hello world!和新的命令行。
说明在刚开始运行的时候,数据被存在行缓冲区中的,3秒过后,才刷新出来。
- #include <stdio.h>
- #include <unistd.h>
- int main()
- {
- printf("hello world!");
- fflush(stdout);
- sleep(3);
- return 0;
- }
直接显现hello world!,然后停留3秒之后,在其后面直接给出新的命令行。
(1)proc.h
- #pragma once
-
- #include <stdio.h>
-
- void process();
(2)proc.c
- void process()
- {
- const char *lable = "|/-\\";
- char bar[SIZE];
- memset(bar,0,sizeof(bar));
- int i = 0;
- while(i<=100)
- {
- printf("\033[42;32;31m[%-100s\033[0m][%d%%][%c]\r",bar,i,lable[i%4]);
- fflush(stdout);
- bar[i++]=STYLE;
- usleep(100000);
- }
- printf("\n");
- }
(3)main.c
- #include "proc.h"
-
- int main()
- {
- process();
- return 0;
- }
运行结果:
本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。