我們在不久後的將來就會開始規劃通訊錄程式,其中會提供使用者操作的提示訊息,類似我們常用的下拉式選單,使用者輸入數字就能開啟相對應的功能。以下程式把印出提示訊息的功能全部集中在函數 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月 */
編譯後執行,結果如下
以上兩個例子都是沒有回傳值也沒有參數列的例子,當然,這是一種設計方法,我們會陸陸續續討論不同的函數設計方法。
問題與討論
- 什麼情況下函數不需要有回傳值?
- 什麼情況下不必提供參數給函數?
- 如果一個程式模組,如 C 語言的函數完全部跟其他模組互動,有什麼優缺點?
沒有留言:
張貼留言