我們在不久後的將來就會開始規劃通訊錄程式,其中會提供使用者操作的提示訊息,類似我們常用的下拉式選單,使用者輸入數字就能開啟相對應的功能。以下程式把印出提示訊息的功能全部集中在函數 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 語言的函數完全部跟其他模組互動,有什麼優缺點?
沒有留言:
張貼留言