我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言实现windows,linux双版本下的进度条小程序,快来试一试吧

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言实现windows,linux双版本下的进度条小程序,快来试一试吧

文章目录

前言
👻作者龟龟不断向前
👻简介宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。
👻专栏C++初阶知识点

👻工具分享

  1. 刷题: 牛客网 leetcode
  2. 笔记软件:有道云笔记
  3. 画图软件:Xmind(思维导图) diagrams(流程图)

在这里插入图片描述

如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持博主🙊,如有不足还请指点,博主及时改正

C语言缓冲区

🚀1.输入缓冲区

🍇模拟登录密码场景

假如现在你有一个登录密码场景的需求:

  1. 输入密码12345678
  2. 确认密码(Y/N)
  3. Y–密码正确,登录成功
  4. N–密码错误,登陆失败
#includeint main(){  char str[20];  char input = 0;  printf("请输入你的密码\n");  scanf("%s",str);      printf("请确认你的密码(Y/N)\n");  input = getchar();      if(input == 'Y')    printf("密码正确,登录成功\n");  else     printf("密码错误,登陆失败\n");  return 0;}

大家可以看一下,下面的代码能否实现我们的需求

看样子是没有什么问题,但是程序结果还是不尽人意

在这里插入图片描述

我明明还没确认密码,他就说密码错误,登陆失败,程序错误的原因就跟C语言的输入缓冲区有关

🍇从键盘将内容输入到内存的真正过程

在这里插入图片描述

在这里插入图片描述

scanf的设计就是已空格和\n为分隔,所以\n不会算进str的内容,而是留在了输入缓冲区

再输入input时,由于输入缓冲区有内容还没轮到我们输入,输入缓冲区的\n就留给了input


🍇解决方法:清空输入缓冲区

🍉清掉一个字符

输入缓冲区里面有内容,导致input并不是我们输入的值,所以咱们可以在前面加一个getchar(),用来吃掉\n

#includeint main(){  char str[20];  char input = 0;  printf("请输入你的密码\n");  scanf("%s",str);      printf("请确认你的密码(Y/N)\n");  input = getchar();      if(input == 'Y')    printf("密码正确,登录成功\n");  else     printf("密码错误,登陆失败\n");  return 0;}

在这里插入图片描述

🍉清空输入缓冲区所有字符

上述代码有一个问题,当我的密码输入123456 xxx(中间留有空格),程序结构又不尽人意了

在这里插入图片描述

还是因为scanf的设计就是已空格和\n为分隔,那些 空格xxx\n 都留在了输入缓冲区,如果我们想要清除他们可以

使用循环清除这些字符

#includeint main(){  char str[20];  char input = 0;  printf("请输入你的密码\n");  scanf("%s",str);  printf("请确认你的密码(Y/N)\n");  while((input = getchar()) != '\n')  {    ;  }  input = getchar();  if(input == 'Y')    printf("密码正确,登录成功\n");  else     printf("密码错误,登陆失败\n");  return 0;}

在这里插入图片描述


🚀2.用户C语言级别的缓冲区

🍇hello world的输出会这样?

环境:linux系统下gcc编译器演示 ,windows环境下是不一样的效果

#include#includeint main(){  printf("hello world\n");  sleep(1);  return 0;}
#include#includeint main(){  printf("hello world");  sleep(1);  return 0;}

大家觉得上述两段代码的输出结果分别是什么呢?

答案:

  • 1–输出hello world,再等待了一秒
  • 2–等待了一秒,输出了hello world

🍇–手动刷新显示器

没错,第二段代码的输出结果和我们想的差别很大,难道是程序执行的顺序是先执行sleep(1),再执行printf("hello world")

当然这是不可能的,因为上述代码是C语言的顺序结构

printf("hello world")已经执行,只是数据没有立即刷新到显示器当中,字符暂时被保存在了用户C语言级别的缓冲区当中。知道程序结束之前才刷新到显示器

解决方法:手动刷新显示器

在这里插入图片描述

#include#includeint main(){  printf("hello world");  fflush(stdout);  sleep(1);  return 0;}

🚀3.进度条小程序

效果如下:

在这里插入图片描述

🍇回车与换行的区别

很多同学都认为回车和换行是一回事,在现实生活中的某些情况确实如此,但在语言角度上:

换行\n:新起一行

回车\r:使光标回到一行的开始位置

🍇进度条小程序代码逐步实现(linux版本)

在这里插入图片描述

思路:

  1. 申请一个101字节大小的字符数组(最后一个位置要放\0)
  2. 首先将内容都置为\0,以免之后我们的手动设置\0
  3. 循环100次,从左向右,每一次循环将字符数组的一个内容设置为=,然后回车(回到一行的起始行),再打印输出字符串
  4. 设置百分比,运行标志,颜色即可

咱们使用linux版本细节讲解:

#include#includeint main(){  char str[101] = {'\0'};//每个位置都放\0,这样就不需要手动控制  int num = 0;   while(num < 100)  {    str[num] = '=';    printf("\r[%-100s]",str);//由于没有\n,stdout没有刷新    //先回车再输出    fflush(stdout);//手动刷新屏幕    usleep(50000);//单位是微秒    //咱们使总时间为5秒    ++num;  }  printf("\n");  return 0;}

我们设计的是5秒钟将进度条跑完,那么100次循环,一次循环的时间就是0.05秒–50毫秒–50000微秒

usleep的单位就是微秒


加上百分比进度条

#include#includeint main(){  char str[101] = {'\0'};//每个位置都放\0,这样就不需要手动控制  int num = 0;   while(num < 100)  {    str[num] = '=';    printf("\r[%-100s][%3d%%]",str,num+1);//由于没有\n,stdout没有刷新    //先回车再输出    fflush(stdout);//手动刷新屏幕    usleep(50000);//单位是微秒    //咱们使总时间为5秒    ++num;  }  printf("\n");  return 0;}

输出%我们要两个%%才行


加上程序在运行中的标志

#include#includeint main(){  char str[101] = {'\0'};//每个位置都放\0,这样就不需要手动控制  int num = 0;   const char* p = "|/-\\";  while(num < 100)  {    str[num] = '=';    printf("\r[%-100s][%3d%%][%c]",str,num+1,p[num%4]);//由于没有\n,stdout没有刷新    //先回车再输出    fflush(stdout);//手动刷新屏幕    usleep(50000);//单位是微秒    //咱们使总时间为5秒    ++num;  }  printf("\n");  return 0;}

表示\,需要两个\

\ ,|,-,/这些字符连续依次打印的时候即可实现该效果


配个颜色,配色列表如下,咱们就修改一下字体颜色就好

在这里插入图片描述

#include#includeint main(){  char str[101] = {'\0'};//每个位置都放\0,这样就不需要手动控制  int num = 0;   const char* p = "|/-\\";//表示程序在进行  //注意\是识别转义字符的标志,想打印\要两个反斜杠  while(num < 100)  {    str[num] = '=';    printf("\r\033[32m[%-100s][%3d%%][%c]",str,num+1,p[num%4]);//由于没有\n,stdout没有刷新    //先回车再输出    fflush(stdout);//手动刷新屏幕    usleep(50000);//单位是微秒    //咱们使总时间为5秒    ++num;  }  printf("\n");  return 0;}

🍇windows版本的进度条小程序

效果如下:
在这里插入图片描述

#include#include#include //设置字体颜色的函数void color(short x)//自定义函根据参数改变颜色 {    if(x>=0 && x<=15)//参数在0-15的范围颜色    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);//只有一个参数,改变字体颜色     else//默认的颜色白色    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);}int main(){  char str[101] = {'\0'};//每个位置都放\0,这样就不需要手动控制  int num = 0;   const char* p = "|/-\\";//表示程序在进行  //注意\是识别转义字符的标志,想打印\要两个反斜杠  color(2);  while(num < 100)  {    str[num] = '=';    printf("\r\033[32m[%-100s][%3d%%][%c]",str,num+1,p[num%4]);//由于没有\n,stdout没有刷新    //先回车再输出    fflush(stdout);//手动刷新屏幕    Sleep(50);//单位是微秒    //咱们使总时间为5秒    ++num;  }  printf("\n");  return 0;}

颜色列表:

在这里插入图片描述

上述的color函数的实现来自于此文章:(53条消息) C语言教你怎么改变字体颜色_nacrt的博客-CSDN博客_c语言颜色函数color怎么使用

本篇文章就到这,希望可以让大家感受到乐趣,咱们下期见。

点赞

来源地址:https://blog.csdn.net/m0_64361907/article/details/127606513

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言实现windows,linux双版本下的进度条小程序,快来试一试吧

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录