Struct是在C中非常好用寫法,筆者稱之為"自訂的一種多元資料型態"
 
為什麼這麼形容呢?
 
請先看看以下範例:
 
typedef struct{int a[10];char b[10;]}example_info;
 
在以上的範例中,我們定義一個資料型態"example_info"
 
其中包含一個整數(int)陣列a和一個字元(char)陣列b
 
這樣在使用時就可以直接呼叫,用法如下:
 
#include<stdio.h>
typedef struct{int a[10];char b[10;]}example_info;
int main()
{
    example_info ex;/*請注意,因為是資料型態,所以使用前也需定義變數*/
    int p[10];char q[10];/*另外定義本範例所要使用的變數*/
    for(int i=0;i<10;i++)
    {
         q[i]=ex.b[i];
    }
    return 0;
   }
以上範例雖然沒有任何意義,但經過程序
 
q陣列的值就可以被"ex"中b的值所取代,這就是Struct的基本用法
 
看到這裡,有人可能會想說:「用這要幹麻? 分開定義不就好了?」
 
沒錯,在上述範例下,分開定義也可以行的通
 
但這麼做比較有系統,程式碼本身也較容易被暸解
 
至於應用方法,以下將做說明
----------------------------------------------------------------------------------------------------------
相信各位都知道,"副函式"是由程式設計師應程式本身需要
 
而寫出的函式,但這種寫函式的方法只能回傳"一個"值
 
當然也有別的方法,例如設定不回傳(void)後再用指標(point)
 
不過,今天我們所要談的是另一種方法
 
首先,借用上述程式碼,我們可以將副函式格式設定成如下方式:
 
exmple_info 副函式名稱(輸入值)
 
如此一來就可以經由一個return傳回一組資料
 
這是筆者認為最實用的部份
 
以下為實用範例:
 
/*本程式可利用檔案輸入個人資料(姓名+IP),並將同一網域的使用者列印出來*/
#include<stdio.h>
#include<stdlib.h>
typedef struct{int ip[4];char name[11];} address_t;/*定義資料型態*/
void print_address(address_t,address_t);
address_t scan_address(FILE *);
int local_address(address_t,address_t);
int main()
{
 FILE *infilep;
 int i=0,j=0,k=0;
 infilep=fopen("in.txt","r");
 address_t data[100];
 do
 {
  data[i]=scan_address(infilep);
  i++;
 }

 while(data[i-1].ip[0]!=0,data[i-1].ip[1]!=0);
 i--;
 for(j=0;j<i;j++)
 {
  for(k=j+1;k<i;k++)
  {
   if((local_address(data[j],data[k])==1)&&(j!=k))
   {
    print_address(data[j],data[k]);
   }
  }
 }
 fclose(infilep);
 return 0;
}
address_t scan_address(FILE *infilep)/*此副函式可利用struct回傳一組data*/
{
 address_t data;
 char ch;
 fscanf(infilep,"%d%c%d%c%d%c%d%s",&data.ip[0],&ch,&data.ip[1],&ch,&data.ip[2],&ch,&data.ip[3],&data.name);
 return data;
}

void print_address(address_t a,address_t b)
{
 printf("Machines %s and %s are on the same local network\n",a.name,b.name); 
}
int local_address(address_t a,address_t b)
{
 if((a.ip[0]==b.ip[0])&&(a.ip[1]==b.ip[1])) return 1;
 else return 0;
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 comaniac0422 的頭像
    comaniac0422

    comaniac0422

    comaniac0422 發表在 痞客邦 留言(2) 人氣()