大家對計時器應該不陌生,我們在制定一個計劃時,經常喜歡設置一個倒計時來規定完成時限,等到計時結束,它還會報警提示,今天,我就用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 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_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); 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語言倒計時計時器內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_43772810/article/details/121347301