资讯专栏INFORMATION COLUMN

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

Lin_YT / 1730人阅读

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

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

实现思路

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

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

1.极简版本

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

#include #include      //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.普通版本

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

  1. 设置计时时间
  2. 倒计时
  3. 蜂鸣器报警(系统提示音)
#include #include int 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 #include #include                  //kbhit()/_kbhit(),getch()#include                //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;}

运行效果

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123617.html

相关文章

  • 基于C-V2X的闯红灯预警方法与流程

    摘要:其中判断信号灯的和车辆的位置关系可以通过,车辆的航向角信息,以及车辆的经纬度信息,目标点的经纬度信息,进行计算和处理后可以获取目标点和车辆的相对位置。 首先简单说明一下闯红灯预警算法流程图,总共分为7步如下图所示: 背景技术: 本算法主要是基于V2X通信技术,在道路交通中,车辆与车辆之间,...

    RobinQu 评论0 收藏0
  • 如何用基于WebGL架构的3D可视化平台搭建-设备管理系统

    摘要:下面我们将用平台来模拟一个设备管理系统。查看是否创建了定时器第三步,创建摄像机面板,烟感报警面板以及控制设备的开关,这里简单调整一下面板位置之后会增加两个创建设备的按钮。创建对象数组,以及数组标识第五步,为每个设备对应的创建控制开关。 国内高层建筑不断兴建,它的特点是高度高、层数多、体量大。面积可达几万平方米到几十万平方米。这些建筑都是一个个庞然大物,高高的耸立在地面上,这是它的外观,...

    jiekechoo 评论0 收藏0
  • Javascript调试命令——你只会Console.log() ?

    摘要:调试命令你只会对象提供对浏览器控制台的接入如的。分类输出不同类别信息的输出文字信息提示信息警告信息错误信息分组输出使用和包裹分组内容。中的参数作为计时器的标识,具有唯一性。应该需要其他的调试工具。 Javascript调试命令——你只会Console.log() ? Console 对象提供对浏览器控制台的接入(如:Firefox 的 Web Console)。不同浏览器上它的工作方式...

    Ocean 评论0 收藏0
  • Python 中的 10 个常见安全漏洞,以及如何避免(上)

    摘要:在考虑安全性时,你需要考虑如何避免被滥用,也不例外,即使在标准库中,也存在用于编写应用的不良实践。计时攻击需要精确性,所以通常不能用于高延迟的远程网络。由于大多数应用程序涉及可变延迟,因此几乎不可能在服务器上编写计时攻击。 简评:编写安全代码很困难,当你学习一个编程语言、模块或框架时,你会学习其使用方法。 在考虑安全性时,你需要考虑如何避免被滥用,Python 也不例外,即使在标准库中...

    Kaede 评论0 收藏0
  • Python 中的 10 个常见安全漏洞,以及如何避免(上)

    摘要:在考虑安全性时,你需要考虑如何避免被滥用,也不例外,即使在标准库中,也存在用于编写应用的不良实践。计时攻击需要精确性,所以通常不能用于高延迟的远程网络。由于大多数应用程序涉及可变延迟,因此几乎不可能在服务器上编写计时攻击。 简评:编写安全代码很困难,当你学习一个编程语言、模块或框架时,你会学习其使用方法。 在考虑安全性时,你需要考虑如何避免被滥用,Python 也不例外,即使在标准库中...

    Jingbin_ 评论0 收藏0

发表评论

0条评论

Lin_YT

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<