本站電子書

您可以在這些電子書店找到本站電子書: Google Play 圖書iBooks StoreHyReadReadmooPubu
===>>>本站推出學習遊戲意見調查<<<===《如何自學程式設計》入選 Google Play 台灣地區2016年度最佳書籍

C 語言初學教材 - 第五章 印出提示訊息與顯示現在時間

沒有回傳值的函數需要須告為 void ,其為關鍵字之一。沒有參數的函數,參數列也需要宣告為 void 。若是回傳值及參數列都宣告為 void ,那麼這個函數就是負責執行一些與呼叫函數不需要互動的功能。



我們在不久後的將來就會開始規劃通訊錄程式,其中會提供使用者操作的提示訊息,類似我們常用的下拉式選單,使用者輸入數字就能開啟相對應的功能。以下程式把印出提示訊息的功能全部集中在函數 printPrompt() 中,程式所有的工作就是呼叫一次 printPrompt()
#include <stdio.h>

void printPrompt(void);

int main(void)
{
    printPrompt();
    return 0;
}

void printPrompt(void)
{
    printf("\n\n1. 增加好友\n");
    printf("2. 刪除好友\n");
    printf("3. 查詢好友\n");
    printf("4. 排序列表\n");
    printf("5. 印出列表\n");
    printf("6. 存檔後登出\n");
    printf("7. 不存檔登出\n");
    printf("8. 存檔後離開\n");
    printf("9. 不存檔離開\n\n");
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:printprompt.c
    功能:印出提示訊息
    作者:張凱慶
    時間:西元2010年7月 */


編譯後執行,結果如下



我們也可以把印出現在時間的功能放在特定函數中,假設這個印出時間的函數不需要與其它程式互動
#include <stdio.h>
#include <time.h>

struct my_tm {
    int year;  // 現在年份
    int month; // 月份
    int day;   // 日期
    int hour;  // 二十四小時制的時
    int isam;  // 上午為非 0 值,下午為 0
    int hourt; // 十二小時制的時
    int min;   // 分
    int sec;   // 秒
};

typedef struct my_tm My_Time;

void printtime(void);

int main(void)
{
    printtime();
    return 0;
}

void printtime(void)
{
    time_t seconds = time(NULL);
    struct tm *tmPtr = localtime(&seconds);
    My_Time now;
    
    now.year = tmPtr->tm_year + 1900;
    now.month = tmPtr->tm_mon + 1;
    now.day = tmPtr->tm_mday;
    now.hour = tmPtr->tm_hour;
    if (now.hour < 12 ) {
        now.isam = 1;
        now.hourt = tmPtr->tm_hour;
    }
    else {
        now.isam = 0;
        now.hourt = tmPtr->tm_hour - 12;
    }
    now.min = tmPtr->tm_min;
    now.sec = tmPtr->tm_sec;
    
    printf("\n\n現在時間是西元 %d 年 %d 月 %d 日", now.year, now.month, now.day);
    printf("%s %d 點 %d 分 %d 秒\n\n", now.isam ? "上午" : "下午", now.hourt, now.min, now.sec);
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:printtime.c
    功能:印出現在時間
    作者:張凱慶
    時間:西元2010年7月 */ 


編譯後執行,結果如下



以上兩個例子都是沒有回傳值也沒有參數列的例子,當然,這是一種設計方法,我們會陸陸續續討論不同的函數設計方法。


問題與討論
  1. 什麼情況下函數不需要有回傳值?
  2. 什麼情況下不必提供參數給函數?
  3. 如果一個程式模組,如 C 語言的函數完全部跟其他模組互動,有什麼優缺點?




沒有留言: