2012-03-06

函式的呼叫與傳回值 (字串處理)

記得我之前剛接觸 C 語言的時候, 對於函式相互間的呼叫與應用花了不少時間去搞懂它, 而且學會函式間的呼叫與應用, 更是邁向物件導向程式設計的基礎, 當然 ! 在物件導向中主要是以類別 class 為基礎單位, 並非在此所談論的 "函式", 不過兩者的觀念與架構模式是很類似的, 呵呵呵 ~ 很多學程式設計的人都覺得基礎是很乏味的東西, 只想一開始就涉入最新的技術, 最後只會碰得滿頭包 ! 基礎是很重要的啊 !

設計功能如下 :

從主函式連續呼叫 getchar() 三次 (資料由鍵盤輸入), 取得三個字元變數a b c, 再由函式 char findmax(char ch1,char ch2,char ch3) 將最大的字元傳回並輸出

#include<iostream>
#include<conio.h>
using namespace std;

//getchar為保留字,不可直接用來作為函式名稱
//因此函式名稱改為 getchar2()

char *getchar2()
{
   char *gets;
   //一定要配置記憶體位置給gets, 否則執行後果無法預測(或錯誤)!
   gets=new char;
   cout << endl << "請輸入一個字元(不需按Enter)-->";
   *gets=getche();
   return gets;
}

char *findmax(char *ch1,char *ch2,char *ch3)
{
   if(*ch1>*ch2 && *ch1>*ch3) return ch1;
   if(*ch2>*ch3 && *ch2>*ch1) return ch2;
   return ch3;
}

int main()
{
   char *ch1,*ch2,*ch3;
   ch1=new char;ch2=new char;ch3=new char;
   ch1=getchar2();
   ch2=getchar2();
   ch3=getchar2();
   //在 findmax( ) 函式前加上 * 取值
   //這樣輸出的字元尾部才不會出現亂碼
   cout << endl << "傳回最大字元-->" << *(findmax(ch1,ch2,ch3)) << endl;
   system("pause");
   return 0;
}

==================================
下面這個範例與上面的程式有同工異曲之處, 請耐心解析看看其功能為何 ?

 #include<iostream>

using namespace std;

char *getfstring() //函式getfstring()
{
    char *gets;
    //一定要配置記憶體位置給gets,否則執行後果無法預測!
    gets=new char;
    cout << "請輸入一個字串-->";
    //cin >> gets; //如果使用 cin,輸入空白格時將無法讀取空白格後的字元
    // 改用 cin.getline(),這裏設最大長度為255,可自行更改數值
    cin.getline(gets,255);
    return gets;
}

int main()
{
    cout << endl << "傳回字串-->" << getfstring() << endl;
    system("pause");
    return 0;
}

沒有留言:

張貼留言

搜尋此網誌