目录
回车和换行
缓冲区
设计倒计时
Version1:进度条
回车\r:'r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖。
换行\n:'n' 换行,换到当前位置的下一行,而不会回到行首。(满足回车/换行两种功能)
1 #include
2 #include
3 int main()
4 {
5 printf("hello linux,hello word");
6 sleep(3);
7 return 0;
8 }
1 #include
2 #include
3 int main()
4 {
5 printf("hello linux,hello word\n");
6 sleep(3);
7 return 0;
8 }
屏幕录制 2024-01-27 194734
执行上面两段代码(它们的区别是是否包含\n)
我们清晰的发现:
- 带有\n的就直接出现在了显示器(屏幕)上
- 没有带\n的程序结束之后才回显示在终端上
结论:包括\n在内的之前全部字符串全部刷新到我们的显示器上
刷新的方式:
- \n
- 缓冲区满了
- 程序结束
- 强制刷新fflush fflush(stdout)
- fflush - C++ Reference (cplusplus.com)
- stdout - C++ Reference (cplusplus.com)
//输出流--显示器/终端
extern FILE * stdout;
extern FILE * stderr;
//输入流--键盘
extern FILE * stdin;
//开机默认打开三个流(输入/输出流)
//修改之后
1 #include
2 #include
3 int main()
4 {
5 printf("hello linux,hello word");
6 fflush(stdout);
7 sleep(3);
8 return 0;
9 }
#include
#include
int main()
{
int cnt = 10;
while(cnt>=0)
{
printf("倒计时: %2d\r", cnt);
fflush(stdout);
cnt--;
sleep(1);
}
printf("\n");
//printf("hello bit,hello world...");
//fflush(stdout);
//sleep(3);
return 0;
}
#define Length 101
#define Style '='
const char *lable = "|/-\\";
//version 1
void ProcBar()
{
char bar[Length];
memset(bar, '\0', sizeof(bar));
int len = strlen(lable);
int cnt = 0;
while(cnt <= 100)
{
printf("[%-100s][%3d%%][%c]\r", bar, cnt, lable[cnt%len]);
fflush(stdout);
bar[cnt++] = Style;
usleep(20000);
}
printf("\n");
}
感谢大家的阅读,若有错误和不足,欢迎指正