Linux一个系统程序——进度条
一、回车与换行
\n :回车加换行
\r:换行
观察我们发现以上的两个代码除了缺少/n没有任何区别,但是运行代码之后我们会发现有何大的不同,图一会先在屏幕上打印helloworld在进行休眠2,但是图二会先休眠2在打印helloworld,原因是printf的作用是将括号中的值复制到一个c语言的缓冲区中,但是如果遇到\nor \r\n \n 会将他们之前的内容,全部刷新到显示器,程序退出的时候,曾经的历史数据,会被刷新。
强制刷新
fflush(stdout)
二、写一个倒计时的程序
两位数的打印
2d更新两位,-2d左对齐
进度条代码
三、代码
process.c
#include "process.h"2 void Process()3 {4 char buffer[NUM];5 memset(buffer ,'\0',sizeof(buffer));6 const char *lable = "|/\\";7 int i = strlen(lable);8 int cnt = 0;9 while(cnt<=100)10 {11 printf("[%-100s][%d%%][%c]\r",buffer,cnt,lable[cnt%i]);12 fflush(stdout);13 buffer[cnt++] = Style; 14 usleep(5000);15 }16 printf("\n");17 }
process.h
#pragma once2 #include <stdio.h>3 #include <string.h>4 #include <unistd.h>5 #define NUM 1026 #define Style '=' 7 void Process();
main.c
1 #include "process.h" 2 int main()3 {4 Process();5 return 0;6 }
Makefile
BIN=code.exe2 CC=gcc3 SRC=$(wildcard *.c)4 OBJ=$(SRC:.c=.o)5 LFLAGS=-o6 FLAGS=-c7 RM=rm -f8 $(BIN):$(OBJ)9 $(CC) $(LFLAGS) $@ $^ 10 %.o:%.c11 $(CC) $(FLAGS) $<