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

作者:小辉_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 , min sec 都变为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 sec = 59; //如果原秒数为0,则变为59 if(min > 0) min--; //计时分钟减1 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_flag menu_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); 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); 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 sec = 59; //如果原秒数为0,则变为59 if(min > 0) min--; //计时分钟减1 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语言倒计时计时器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
  • Qt creator中项目的构建配置和运行设置的步骤
    Qt creator中项目的构建配置和运行设置的步骤
    2021-11-11
  • C语言趣味编程之水仙花数
    C语言趣味编程之水仙花数
    2021-11-11
  • 利用C++ OpenCV 实现从投影图像恢复仿射特性
    利用C++ OpenCV 实现从投影图像恢复仿射特性
    2021-11-11
  • C语言编写汉诺塔游戏
    C语言编写汉诺塔游戏
    2021-11-11
  • 详解C++中的const和constexpr
    详解C++中的const和constexpr
    2021-11-11
  • C/C++ Qt StatusBar底部状态栏应用教程
    C/C++ Qt StatusBar底部状态栏应用教程
    2021-11-11
  • C++ 路径中./、../、/代表的含义
    C++ 路径中./、../、/代表的含义
    2021-11-11
  • OpenCV reshape函数实现矩阵元素序列化
    OpenCV reshape函数实现矩阵元素序列化
    2021-11-11
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号