进度条在我们日常生活中可以说非常常见了。我们常常会遇到这样的情况,进度条加载到百分之九十八就卡着不动,这很令人恼火。本篇文章,我将带领大家用c/c++语言编写出一个简单的进度条。
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、c语言printf输出string类型
为了更好地控制格式,没有采用c++中的cout而是c语言中printf()函数。使用c++中的string类型也是为了更加简便地使用。
错误示范
因为printf函数输出字符串是针对char *的,即printf只能输出c语言的内置数据类型,而string不是c语言的内置数据类型。而string类型的对象不止包含字符串,还包含了许多用于操作的函数,所以&str并非字符串的首地址。
所以,如需输出string对象中的字符串,可以使用string的成员函数c_str(),该函数返回字符串的首字符的地址。
正确示范
二、sleep()函数和usleep()函数
1.Sleep函数
Sleep函数可以使计算机程序(进程,任务或线程)进入休眠,使其在一段时间内处于非活动状态。
注意
- 在VC中Sleep中的第一个英文字符为大写的"S"
在标准C中是sleep(S不要大写),下面使用大写的来说明,具体用什么看你用什么编译器。简单的说VC用Sleep,别的一律使用sleep。 - Sleep函数的一般形式:
Sleep(unsigned long); - 其中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);
- 另外还需要引用头文件#include <windows.h>
2.usleep()函数
usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒)
注意
- 需要引头文件#include <unistd.h>
- 个函数不能工作在windows 操作系统中。用在Linux的测试环境下面
3.关于秒的换算
1秒=1000毫秒=1000000微秒
三、fflush()函数 (简单了解)
fflush是一个在C语言标准输入输出库中的函数,功能是冲洗流中的信息,该函数通常用于处理磁盘文件。 fflush ()会强迫将缓冲区内的数据写回参数stream 指定的文件中。
- 头文件 #include<stdio.h>
- 函数结构:int fflush(FILE *stream)
四、%r和%h
- ‘\r’:回车,即将光标移动到当前行的行首;
- ‘\n’:换行,即将光标移动到下一行
五、代码块
1.process.h
代码如下(示例):
#include<stdio.h>
#include<string>
#include <windows.h>
#define N 0
const char style[] = { '#', '$', '>', '-', '*' };
const char lable[4] = { '|','\\','-','\/' };
using namespace std;
2.process.cpp
代码如下(示例):
int main()
{
string str;
char ch = style[N];
for (int i = 1; i <= 100; i++)
{
fflush(stdout);
str += ch;
printf("[%-100s][%d%%][%c]\r", str.c_str(),i, lable[i%4]);
Sleep(100);//1/10s
}
return 0;
}
这里要格外注意,在代码中使用string类型是c++的内容,源文件的后缀是.cpp而不是.c
如果是.c后缀,在编译的时候会出现的错误如下图所示
实现效果如下