用C++顯示電子時鐘吧(現在是:10:10:10 AM)
顯示電子時鐘? 這是什麼意思? 顯示電腦目前的時間嗎?
不不不!沒有那麼難
是讓使用者輸入一個時間,然後以時間的運算格式下去跑而已
你會問:「這種程式有什麼用?」
我回:「沒什麼用= =a,只是讓你熟練迴圈而已」
電子鐘的格式:
24小時制:
「時:分:秒」→時最大值是24;分最大值是60;秒最大值是60。超過最大值必須進位(秒→分→時)
12小時制:
「時:分:秒 AM/PM」→時最大值是12;分最大值是60;秒最大值是60;AM表上午;PM表下午。超過最大值必須進位(秒→分→時)。至於AM/PM則是12小時變換一次(AM→PM;PM→AM)
弄清楚格式後,你就知道迴圈要怎麼寫啦!
沒錯!利用for來做計次迴圈,當秒為60時,分加1,秒變0。依此類推。
AM/PM的話,注意它是12:00:00的時候會變換,然後過一小時後又會變成01:00:00
由此可知,用12小時制來輸出時間會比較麻煩
不過…這正好可以磨練你的技術︿︿
如果是我的話,我會在輸出時先判別目前的「時」是多少
先將「時」以24小時制放進去作換算
如果時為0,那麼就顯示出「12:分:秒 AM」
如果時大於0,小於12,那麼就顯示出「時:分:秒 AM」
如果時等於12,那麼就顯示出「12:分:秒 PM」
如果時大於12,小於24,那麼久顯示出「時:分:秒 PM」
因此,輸出時間前,要先以四個if來做判別
這樣判斷就會寫啦!XDDD
再來,請注意一下電子鐘的格式,舉例:
現在時間:01:00:00
你發現什麼了嗎?
沒錯!時、分、秒一定要顯示成二位數!
你會想說:「這很簡單啊!再多寫一組判別式,如果時、分、秒小於10的話,那麼輸出時,前面再加一個0,這樣就好了啊!」
其實這種想法是可行的,不過有點麻煩就是了
其實只要再用到兩個函數即可
那就是setfill和setw
這兩個函數包含在「iomanip」函式庫裡
格式如下:
cout << setfill(‘填充字元’) << setw(寬度) << 變數/數字/字串;
注意:一個中文的寬度算2喔!!!
舉例:
cout << setfill(‘*’) << setw(4) << 23;
cout << setfill(‘p’) << setw(12) << “電腦不難”;
cout << setfill(‘&’) << setw(5) << 4 << 5 << endl;
cout << setfill(‘&’) << setw(5) << 1 << setw(4) << 2 << endl;
cout << setfill(‘&’) << setw(5) << 1 << setfill(‘*’) << setw(4) << 2 << endl;
cout << setfill(‘&’) << setw(2) << 14 << endl;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
#include <iostream> #include <iomanip> using namespace std; int main() { int s,m,h,delay; //s為秒,m為分,h為小時,delay作延遲用 re: cout << "電腦不難太讚啦!!!https://it-easy.tw/" << endl //廣告宣傳 << "請輸入現在時間(時:分:秒),需24小時制:"; //要求使用者輸入時間資料 cin >> h >> m >> s; if (!(h>=0&&h<=24)||!(m>=0&&m<=60)||!(m>=0&&m<=60)) //判斷使用者輸入的數據是否合理 { cout << "輸入錯誤,請重新輸入" << endl; goto re; } while(true) //連續循環 { for (;s<=60;s++) { for (delay=0;delay<=200000000;delay++) //限制時間速度(100000000~300000000) { continue; //這迴圈只用來延遲時間 } if (s==60) //這個if用來判斷,「當秒為60時,分加1,秒變成0」。進而達成電子中數字進位的效果 { m++; s=0; } if (m==60) //這個if用來判斷,「當分為60時,小時加1,分變成0」。進而達成電子中數字進位的效果 { h++; m=0; } if (h==24) //這個if用來判斷,「當小時為24時,小時變成0」。進而達成電子中數字進位的效果 { h=0; } if (h==0) //判斷目前是否為午夜(12:m:s AM) { cout << "現在時間:" << setfill('0') << "12" << ":" << setw(2)<< m << ":" << setw(2) << s << " AM" << "r" ; } else if (h>0 && h<12) //判斷目前是否為上午(AM) { cout << "現在時間:" << setfill('0') << setw(2) << h << ":" << setw(2)<< m << ":" << setw(2) << s << " AM" << "r" ; } else if (h==12) //判斷目前是否為中午(12:m:s PM) { cout << "現在時間:" << setfill('0') << "12" << ":" << setw(2)<< m << ":" << setw(2) << s << " PM" << "r" ; } else if (h>=12) //判斷目前是否為下午(PM) { cout << "現在時間:" << setfill('0') << setw(2) << h-12 << ":" //h-12的原因:因為是用12小時制來顯示時間,小時不可超過12。當小時超過12,小時就要減12,並且將AM改為PM << setw(2)<< m << ":" << setw(2) << s << " PM" << "r" ; } } } system ("pause"); return 0; } |