C语言小项目计时器的实现思路(倒计时+报警提示)

 更新时间:2021年11月18日 09:56:43   作者:小辉_Super  
这篇文章主要介绍了C语言小项目计时器(倒计时+报警提示)的实现思路,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

实现思路

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

  • 极简版:简单的单次倒计时,只能设置秒数,计时通过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.h>

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

运行效果

请添加图片描述

到此这篇关于C语言小项目——计时器(倒计时+报警提示)的文章就介绍到这了,更多相关C语言倒计时计时器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • OpenCV+Qt实现图像处理操作工具的示例代码

    OpenCV+Qt实现图像处理操作工具的示例代码

    这篇文章主要介绍了利用OpenCV+Qt实现图像处理操作工具,可以实现雪花屏、高斯模糊、中值滤波、毛玻璃等操作,感兴趣的可以了解一下
    2022-08-08
  • 结构体对齐的规则详解及C++代码验证

    结构体对齐的规则详解及C++代码验证

    在c语言的结构体里面一般会按照某种规则去进行字节对齐。本文就来介绍一下如何实现,具有一定的参考价值,感兴趣的可以了解下
    2021-08-08
  • 详解C/C++中的select、poll和epoll

    详解C/C++中的select、poll和epoll

    本文通过示例介绍了C/C++中的select、poll和epoll知识,结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-06-06
  • C++ Qt开发之使用QNetworkAccessManager实现Web网页访问

    C++ Qt开发之使用QNetworkAccessManager实现Web网页访问

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,本文主要介绍了如何运用QNetworkAccessManager组件实现Web网页访问,需要的可以参考下
    2024-03-03
  • c++ 类函数作为模板参数实现方式详解

    c++ 类函数作为模板参数实现方式详解

    这篇文章主要介绍了c++ 类函数作为模板参数实现方式,在实现中加入增强逻辑,这种方式对代码侵入性过高,而且无法控制该逻辑是否需要,如果不需要的话又得重新修改代码实现,需要的朋友可以参考下
    2023-03-03
  • C++ Dijkstra算法之求图中任意两顶点的最短路径

    C++ Dijkstra算法之求图中任意两顶点的最短路径

    这篇文章主要为大家详细介绍了用C++经典算法-Dijkstra算法求任意两顶点之间的最短路径,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C++中的覆盖和隐藏详解

    C++中的覆盖和隐藏详解

    这篇文章主要介绍了C++中重载、重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下,希望能够给你带来帮助
    2021-08-08
  • Qt项目实战之实现MP3音乐播放器

    Qt项目实战之实现MP3音乐播放器

    这篇文章主要为大家详细介绍了如何利用Qt实现MP3音乐播放器,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
    2023-03-03
  • C语言中数组的使用详解

    C语言中数组的使用详解

    这篇文章主要为大家介绍了C语言中数组的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • va_list(),va_start(),va_arg(),va_end() 详细解析

    va_list(),va_start(),va_arg(),va_end() 详细解析

    这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.下面我们写一个简单的可变参数的函数,该函数至少有一个整数参数,第二个参数也是整数,是可选的.函数只是打印这两个参数的值
    2013-09-09

最新评论