0
点赞
收藏
分享

微信扫一扫

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

文章目录

在这里插入图片描述

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

C语言缓冲区

🚀1.输入缓冲区

🍇模拟登录密码场景

#include<stdio.h>

int 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;
}

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

在这里插入图片描述

在这里插入图片描述


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

🍉清掉一个字符
#include<stdio.h>

int 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;
}

在这里插入图片描述

🍉清空输入缓冲区所有字符
#include<stdio.h>

int 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的输出会这样?

#include<stdio.h>
#include<unistd.h>
int main()
{
  printf("hello world\n");
  sleep(1);
  return 0;
}

#include<stdio.h>
#include<unistd.h>
int main()
{
  printf("hello world");
  sleep(1);
  return 0;
}

答案:

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

🍇–手动刷新显示器

#include<stdio.h>
#include<unistd.h>
int main()
{
  printf("hello world");
  fflush(stdout);
  sleep(1);
  return 0;
}

🚀3.进度条小程序

效果如下:

🍇回车与换行的区别

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

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

在这里插入图片描述

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

#include<stdio.h>
#include<unistd.h>

int 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;
}


#include<stdio.h>
#include<unistd.h>

int 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<stdio.h>
#include<unistd.h>

int 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<stdio.h>
#include<unistd.h>

int 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<stdio.h>
#include<windows.h>

#include <windows.h>//设置字体颜色的函数
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怎么使用

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

点赞

举报

相关推荐

0 条评论