用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,這樣就好了啊!」

其實這種想法是可行的,不過有點麻煩就是了

其實只要再用到兩個函數即可

那就是setfillsetw

這兩個函數包含在「iomanip」函式庫裡

格式如下:

cout << setfill(‘填充字元’) << setw(寬度) << 變數/數字/字串;

注意:一個中文的寬度算2喔!!!

舉例:

cout << setfill(‘*’) << setw(4) << 23;
這樣一來,輸出結果為「**23」
再舉個例子:
cout << setfill(‘p’) << setw(12) << “電腦不難”;
輸出結果:「pppp電腦不難」
再舉個例子:
cout << setfill(‘&’) << setw(5) << 4 << 5 << endl;
你認為這樣的結果是什麼,會是「&&&&4&&&&5」嗎? 還是「&&&45」呢?
答案:都不是!!!
setfill可以影響整行程式的setw,但setw卻只能影響其變數/數字/字串的輸出寬度
所以以上程式的輸出結果為:「&&&&45」
再舉個例子:
cout << setfill(‘&’) << setw(5) << 1 << setw(4) << 2 << endl;
你覺得輸出結果會是什麼?
答案就是:「&&&&1&&&2」
再舉個例子:
cout << setfill(‘&’) << setw(5) << 1 << setfill(‘*’) << setw(4) << 2 << endl;
此行程式出現了兩個setfill,難道說只選其中一個當作填充字元……?
不對,setfill(‘&’)只會影響到 setfill(‘*’)之前的這段程式,而setfill(‘*’)之後的程式就會受它自己影響啦!
所以,顯示結果為:「&&&&1***2」
最後,舉個簡單的例子:
cout << setfill(‘&’) << setw(2) << 14 << endl;
你覺得輸出結果會是什麼?
沒錯!答案就是:「14」!!
因為14已有2個寬度,所以「&」不會出來填充
.
我已經舉了這麼多例子了,我想你應該會用setfill和setw了吧?
好!那我們把「秒、分、時」的輸出格式改成我們要的吧!
.
我寫的電子鐘程式碼如下:
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 << "電腦不難太讚啦!!!http://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;
}

http://farm4.static.flickr.com/3434/3203018408_95512c46ed.jpg

文章分類:C & C++|標籤:,

迴響已關閉