快捷搜索:  朋友圈  as  伪静态  次数  响应式  虎牙  浏览数  anniu

C语言小项目——计时器(倒计时+报警提示)

大家对计时器应该不陌生我们在制定一个计划时经常喜欢设置一个倒计时来规定完成时限等到计时结束它还会报警提示今天我就用C语言编写一个简易的倒计时计时器。

文章目录

实现思路1.极简版本运行效果 2.普通版本运行效果 3.高级版本运行效果

实现思路

简单介绍一下我的实现思路
本文包括三个版本分别是极简版、普通版、高级版

极简版简单的单次倒计时只能设置秒数计时通过Sleep()函数实现粗略倒计时先输入秒数cnt然后每过1秒Sleep(1000)cnt减1直到cnt变成0就退出程序。普通版可设置计时的时、分、秒hour,min,sec计时通过time()函数实现用来获取当前系统时间的秒数进入while循环判断系统时间秒数是否变化如有变化说明过了1秒。这时将秒数sec减1当sec减到0下一秒就将分钟min减1同时sec变为59。分钟min和小时hour的变化关系与秒和分钟的关系类似。一直循环倒计时直到hour,minsec都变为0此时计时结束进行报警提示printf(\a)。高级版在普通版的基础上增加重复计时和暂停计时的功能。首先需要设定计时时间然后按下空格键开始计时再次按下空格键可以暂停倒计时同时设置的倒计时时间具有记忆功能即计时结束后再次按下空格依然按照上次设定的计时时间进行计时。

1.极简版本

极简版代码很简单就不多作介绍了。

#include stdio.h#include Windows.h     //Sleep(ms)int main(){    int cnt  0;    puts(输入秒数);    scanf(%d, cnt);    while(cnt  0)    {        Sleep(1000);        printf(%d\r, cnt);        cnt--;    }    printf(计时结束\n);    return 0;}

运行效果

请添加图片描述

2.普通版本

普通版本也很简单主要包括

设置计时时间倒计时蜂鸣器报警系统提示音
#include stdio.h#include time.hint main(void){    int hour  0, min  0, sec  0;    time_t time_sec  0;    time_t old_sec  0;    printf(请设置计时时间——时 分 秒\n);    scanf(%d%d%d, hour, min, sec);    time(time_sec);              //获取当前秒数1970-1-1 00:00:00到现在    printf(倒计时——%02d:%02d:%02d\r, hour, min, sec);    old_sec  time_sec;           //更新旧的秒数    while(hour  0 || min  0 || sec  0)    {        time(time_sec);          //获取秒数保存到time_t变量        if(time_sec ! old_sec)   //如果秒数改变计时达到1秒        {            old_sec  time_sec;   //更新旧的秒数            if(sec  0)                sec--;            //计时秒数减1            else            {                sec  59;         //如果原秒数为0则变为59                if(min  0)                    min--;        //计时分钟减1                else                {                    min  59;     //如果分钟数为0则变为59                    hour--;       //计时小时数减1                }            }            printf(倒计时——%02d:%02d:%02d\r, hour, min, sec);        }    }    for(int i  0; i  5; i)    {        printf(\a);             //响蜂鸣器或系统提示音        sleep(1);                 //延时1秒太短电脑不发出声音    }    puts(\n计时结束\n);    return 0;}

运行效果

请添加图片描述

3.高级版本

在普通版本的基础上添加了菜单打印和键盘按键扫描两部分代码。
程序的核心为 pause_flagmenu_flag这两个标志前者控制倒计时的开始暂停继续后者控制菜单是否需要刷新只有程序第一次运行、设置计时时间或计时结束时才需要打印菜单。

#include stdio.h#include time.h#include conio.h                 //kbhit()/_kbhit(),getch()#include Windows.h               //Sleep(ms)int main(void){    //动态计时参数打印值    unsigned int hour  0, min  0, sec  0;    //默认值设定的计时参数    unsigned int hour_def  0, min_def  0, sec_def  0;    time_t time_sec  0;    time_t old_sec  0;    char key;    int pause_flag  1;            //暂停标志    int menu_flag  1;             //菜单打印标志    while(1)    {        /**************** 菜单打印 ****************/        if(menu_flag  1)        {            menu_flag  0;            system(cls);          //Windows系统清屏命令            printf(\n); //菜单            if(hour_def || min_def || sec_def)                printf(|\t倒计时时间%02d:%02d:%02d\t |\n,\                       hour_def, min_def, sec_def);            else                printf(|\t未设置计时时间\t\t|\n);            printf(| S:设置 空格:开始/暂停 Q:退出 |\n);            printf(\n);            if(pause_flag  0)            {                printf(计时结束\n);                for(int i  0; i  5; i)                {                    printf(\a);             //响蜂鸣器或系统提示音                    sleep(1);                 //延时1秒太短电脑不发出声音                }                pause_flag  1;          //停止计时            }        }        /**************** 键盘按键扫描操作 ****************/        key  0;        if(_kbhit())                      //检测到按键按下            key  getch();                //读取按键        switch(key)        {            case s:                     //按s/S设置计时时间            case S:                printf(请设置计时时间——时 分 秒\n);                scanf(%d %d %d, hour_def, min_def, sec_def);                if(hour_def  24 || min_def  59 || sec_def  59)                {                    //printf(时间设置失败\n);                    hour_def  min_def  sec_def  0; //重置时间                }                hour  min  sec  0;       //计时值清零                menu_flag  1;              //打印菜单                break;            case  :                       //按空格键开始/暂停计时                if(hour_def || min_def || sec_def)   //如果时间有效                {                    if(pause_flag)                    {                        pause_flag  0;     //开始计时或继续计时                        if(!hour  !min  !sec) //计数值为0                        {                            hour  hour_def;   //读取上次设置的时间                            min  min_def;                            sec  sec_def;                            //打印初始时间                            printf(倒计时——%02d:%02d:%02d\r,\                                   hour, min, sec);                        }                    }                    else                        pause_flag  1;     //暂停计时                    time(time_sec);        //获取当前秒数1970-1-1 00:00:00到现在                    old_sec  time_sec;     //更新旧的秒数                }                break;            case q:            case Q: printf(程序退出\n);return 0;        }        /**************** 计时操作 ****************/        time(time_sec);              //获取秒数保存到time_t变量        if(pause_flag  0  old_sec ! time_sec)        {            old_sec  time_sec;       //更新旧的秒数            if(sec  0)                sec--;                //计时秒数减1            else            {                sec  59;             //如果原秒数为0则变为59                if(min  0)                    min--;            //计时分钟减1                else                {                    min  59;         //如果分钟数为0则变为59                    hour--;           //计时小时数减1                }            }            printf(倒计时——%02d:%02d:%02d\r, hour, min, sec);            if(!hour  !min  !sec) //计时结束                menu_flag  1;        //打印菜单        }    }    return 0;}

运行效果

请添加图片描述

文章到这里就结束了如果你有更好的方案欢迎分享如果我程序有任何问题可以评论或私聊我一起学习一起进步

您可能还会对下面的文章感兴趣: