摘要:大家對計(jì)時(shí)器應(yīng)該不陌生,我們在制定一個(gè)計(jì)劃時(shí),經(jīng)常喜歡設(shè)置一個(gè)倒計(jì)時(shí)來規(guī)定完成時(shí)限,等到計(jì)時(shí)結(jié)束,它還會報(bào)警提示,今天,我就用語言編寫一個(gè)簡易的倒計(jì)時(shí)計(jì)時(shí)器。
大家對計(jì)時(shí)器應(yīng)該不陌生,我們在制定一個(gè)計(jì)劃時(shí),經(jīng)常喜歡設(shè)置一個(gè)倒計(jì)時(shí)來規(guī)定完成時(shí)限,等到計(jì)時(shí)結(jié)束,它還會報(bào)警提示,今天,我就用C語言編寫一個(gè)簡易的倒計(jì)時(shí)計(jì)時(shí)器。
簡單介紹一下我的實(shí)現(xiàn)思路:
本文包括三個(gè)版本,分別是極簡版、普通版、高級版:
Sleep()
函數(shù)實(shí)現(xiàn)(粗略倒計(jì)時(shí)),先輸入秒數(shù)cnt
,然后每過1秒(Sleep(1000
),cnt
減1,直到cnt
變成0
,就退出程序。hour
,min
,sec
),計(jì)時(shí)通過time()
函數(shù)實(shí)現(xiàn)(用來獲取當(dāng)前系統(tǒng)時(shí)間的秒數(shù)),進(jìn)入while循環(huán),判斷系統(tǒng)時(shí)間秒數(shù)是否變化,如有變化,說明過了1秒
。這時(shí)將秒數(shù)sec
減1,當(dāng)sec
減到0,下一秒就將分鐘min
減1,同時(shí)sec
變?yōu)?9。分鐘min
和小時(shí)hour
的變化關(guān)系與秒和分鐘的關(guān)系類似。一直循環(huán)倒計(jì)時(shí),直到hour
,min
和sec
都變?yōu)?,此時(shí)計(jì)時(shí)結(jié)束,進(jìn)行報(bào)警提示(printf(/a")
)。極簡版代碼很簡單,就不多作介紹了。
#include #include //Sleep(ms)int main(){ int cnt = 0; puts("輸入秒數(shù)"); scanf("%d", &cnt); while(cnt >= 0) { Sleep(1000); printf("%d/r", cnt); cnt--; } printf("計(jì)時(shí)結(jié)束/n"); return 0;}
普通版本也很簡單,主要包括:
- 設(shè)置計(jì)時(shí)時(shí)間
- 倒計(jì)時(shí)
- 蜂鳴器報(bào)警(系統(tǒng)提示音)
#include #include int main(void){ int hour = 0, min = 0, sec = 0; time_t time_sec = 0; time_t old_sec = 0; printf("請?jiān)O(shè)置計(jì)時(shí)時(shí)間——時(shí) 分 秒/n"); scanf("%d%d%d", &hour, &min, &sec); time(&time_sec); //獲取當(dāng)前秒數(shù)(1970-1-1 00:00:00到現(xiàn)在) printf("倒計(jì)時(shí)——%02d:%02d:%02d/r", hour, min, sec); old_sec = time_sec; //更新舊的秒數(shù) while(hour > 0 || min > 0 || sec > 0) { time(&time_sec); //獲取秒數(shù)保存到time_t變量 if(time_sec != old_sec) //如果秒數(shù)改變(計(jì)時(shí)達(dá)到1秒) { old_sec = time_sec; //更新舊的秒數(shù) if(sec > 0) sec--; //計(jì)時(shí)秒數(shù)減1 else { sec = 59; //如果原秒數(shù)為0,則變?yōu)?9 if(min > 0) min--; //計(jì)時(shí)分鐘減1 else { min = 59; //如果分鐘數(shù)為0,則變?yōu)?9 hour--; //計(jì)時(shí)小時(shí)數(shù)減1 } } printf("倒計(jì)時(shí)——%02d:%02d:%02d/r", hour, min, sec); } } for(int i = 0; i < 5; i++) { printf("/a"); //響蜂鳴器(或系統(tǒng)提示音) sleep(1); //延時(shí)1秒,太短電腦不發(fā)出聲音 } puts("/n計(jì)時(shí)結(jié)束/n"); return 0;}
在普通版本的基礎(chǔ)上添加了菜單打印和鍵盤按鍵掃描兩部分代碼。
程序的核心為pause_flag
和menu_flag
這兩個(gè)標(biāo)志,前者控制倒計(jì)時(shí)的開始
,暫停
與繼續(xù)
,后者控制菜單
是否需要刷新(只有程序第一次運(yùn)行、設(shè)置計(jì)時(shí)時(shí)間或計(jì)時(shí)結(jié)束時(shí)才需要打印菜單)。
#include #include #include //kbhit()/_kbhit(),getch()#include //Sleep(ms)int main(void){ //動(dòng)態(tài)計(jì)時(shí)參數(shù)(打印值) unsigned int hour = 0, min = 0, sec = 0; //默認(rèn)值(設(shè)定的計(jì)時(shí)參數(shù)) 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; //暫停標(biāo)志 int menu_flag = 1; //菜單打印標(biāo)志 while(1) { /**************** 菜單打印 ****************/ if(menu_flag == 1) { menu_flag = 0; system("cls"); //Windows系統(tǒng)清屏命令 printf("================================/n"); //菜單 if(hour_def || min_def || sec_def) printf("|/t倒計(jì)時(shí)時(shí)間:%02d:%02d:%02d/t |/n",/ hour_def, min_def, sec_def); else printf("|/t未設(shè)置計(jì)時(shí)時(shí)間/t/t|/n"); printf("| S:設(shè)置 空格:開始/暫停 Q:退出 |/n"); printf("================================/n"); if(pause_flag == 0) { printf("計(jì)時(shí)結(jié)束/n"); for(int i = 0; i < 5; i++) { printf("/a"); //響蜂鳴器(或系統(tǒng)提示音) sleep(1); //延時(shí)1秒,太短電腦不發(fā)出聲音 } pause_flag = 1; //停止計(jì)時(shí) } } /**************** 鍵盤按鍵掃描+操作 ****************/ key = 0; if(_kbhit()) //檢測到按鍵按下 key = getch(); //讀取按鍵 switch(key) { case "s": //按s/S設(shè)置計(jì)時(shí)時(shí)間 case "S": printf("請?jiān)O(shè)置計(jì)時(shí)時(shí)間——時(shí) 分 秒/n"); scanf("%d %d %d", &hour_def, &min_def, &sec_def); if(hour_def > 24 || min_def > 59 || sec_def > 59) { //printf("時(shí)間設(shè)置失敗/n"); hour_def = min_def = sec_def = 0; //重置時(shí)間 } hour = min = sec = 0; //計(jì)時(shí)值清零 menu_flag = 1; //打印菜單 break; case " ": //按空格鍵開始/暫停計(jì)時(shí) if(hour_def || min_def || sec_def) //如果時(shí)間有效 { if(pause_flag) { pause_flag = 0; //開始計(jì)時(shí)或繼續(xù)計(jì)時(shí) if(!hour && !min && !sec) //計(jì)數(shù)值為0 { hour = hour_def; //讀取上次設(shè)置的時(shí)間 min = min_def; sec = sec_def; //打印初始時(shí)間 printf("倒計(jì)時(shí)——%02d:%02d:%02d/r",/ hour, min, sec); } } else pause_flag = 1; //暫停計(jì)時(shí) time(&time_sec); //獲取當(dāng)前秒數(shù)(1970-1-1 00:00:00到現(xiàn)在) old_sec = time_sec; //更新舊的秒數(shù) } break; case "q": case "Q": printf("程序退出/n");return 0; } /**************** 計(jì)時(shí)操作 ****************/ time(&time_sec); //獲取秒數(shù)保存到time_t變量 if(pause_flag == 0 && old_sec != time_sec) { old_sec = time_sec; //更新舊的秒數(shù) if(sec > 0) sec--; //計(jì)時(shí)秒數(shù)減1 else { sec = 59; //如果原秒數(shù)為0,則變?yōu)?9 if(min > 0) min--; //計(jì)時(shí)分鐘減1 else { min = 59; //如果分鐘數(shù)為0,則變?yōu)?9 hour--; //計(jì)時(shí)小時(shí)數(shù)減1 } } printf("倒計(jì)時(shí)——%02d:%02d:%02d/r", hour, min, sec); if(!hour && !min && !sec) //計(jì)時(shí)結(jié)束 menu_flag = 1; //打印菜單 } } return 0;}
文章到這里就結(jié)束了,如果你有更好的方案,歡迎分享?,如果我程序有任何問題,可以評論或私聊我,一起學(xué)習(xí),一起進(jìn)步?。?!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/123617.html
摘要:其中判斷信號燈的和車輛的位置關(guān)系可以通過,車輛的航向角信息,以及車輛的經(jīng)緯度信息,目標(biāo)點(diǎn)的經(jīng)緯度信息,進(jìn)行計(jì)算和處理后可以獲取目標(biāo)點(diǎn)和車輛的相對位置。 首先簡單說明一下闖紅燈預(yù)警算法流程圖,總共分為7步如下圖所示: 背景技術(shù): 本算法主要是基于V2X通信技術(shù),在道路交通中,車輛與車輛之間,...
摘要:下面我們將用平臺來模擬一個(gè)設(shè)備管理系統(tǒng)。查看是否創(chuàng)建了定時(shí)器第三步,創(chuàng)建攝像機(jī)面板,煙感報(bào)警面板以及控制設(shè)備的開關(guān),這里簡單調(diào)整一下面板位置之后會增加兩個(gè)創(chuàng)建設(shè)備的按鈕。創(chuàng)建對象數(shù)組,以及數(shù)組標(biāo)識第五步,為每個(gè)設(shè)備對應(yīng)的創(chuàng)建控制開關(guān)。 國內(nèi)高層建筑不斷興建,它的特點(diǎn)是高度高、層數(shù)多、體量大。面積可達(dá)幾萬平方米到幾十萬平方米。這些建筑都是一個(gè)個(gè)龐然大物,高高的聳立在地面上,這是它的外觀,...
摘要:調(diào)試命令你只會對象提供對瀏覽器控制臺的接入如的。分類輸出不同類別信息的輸出文字信息提示信息警告信息錯(cuò)誤信息分組輸出使用和包裹分組內(nèi)容。中的參數(shù)作為計(jì)時(shí)器的標(biāo)識,具有唯一性。應(yīng)該需要其他的調(diào)試工具。 Javascript調(diào)試命令——你只會Console.log() ? Console 對象提供對瀏覽器控制臺的接入(如:Firefox 的 Web Console)。不同瀏覽器上它的工作方式...
摘要:在考慮安全性時(shí),你需要考慮如何避免被濫用,也不例外,即使在標(biāo)準(zhǔn)庫中,也存在用于編寫應(yīng)用的不良實(shí)踐。計(jì)時(shí)攻擊需要精確性,所以通常不能用于高延遲的遠(yuǎn)程網(wǎng)絡(luò)。由于大多數(shù)應(yīng)用程序涉及可變延遲,因此幾乎不可能在服務(wù)器上編寫計(jì)時(shí)攻擊。 簡評:編寫安全代碼很困難,當(dāng)你學(xué)習(xí)一個(gè)編程語言、模塊或框架時(shí),你會學(xué)習(xí)其使用方法。 在考慮安全性時(shí),你需要考慮如何避免被濫用,Python 也不例外,即使在標(biāo)準(zhǔn)庫中...
摘要:在考慮安全性時(shí),你需要考慮如何避免被濫用,也不例外,即使在標(biāo)準(zhǔn)庫中,也存在用于編寫應(yīng)用的不良實(shí)踐。計(jì)時(shí)攻擊需要精確性,所以通常不能用于高延遲的遠(yuǎn)程網(wǎng)絡(luò)。由于大多數(shù)應(yīng)用程序涉及可變延遲,因此幾乎不可能在服務(wù)器上編寫計(jì)時(shí)攻擊。 簡評:編寫安全代碼很困難,當(dāng)你學(xué)習(xí)一個(gè)編程語言、模塊或框架時(shí),你會學(xué)習(xí)其使用方法。 在考慮安全性時(shí),你需要考慮如何避免被濫用,Python 也不例外,即使在標(biāo)準(zhǔn)庫中...
閱讀 1573·2023-04-25 16:45
閱讀 1991·2021-11-17 09:33
閱讀 2426·2021-09-27 14:04
閱讀 963·2019-08-30 15:44
閱讀 2691·2019-08-30 14:24
閱讀 3478·2019-08-30 13:59
閱讀 1758·2019-08-29 17:00
閱讀 948·2019-08-29 15:33