1. 程式人生 > >C語言實例解析精粹學習筆記——32

C語言實例解析精粹學習筆記——32

組合 pri 結構體指針 name ber ESS tdi 筆記 string

實例32:

  編制一個包含姓名、地址、郵編和電話的通訊錄輸入和輸出函數。

思路解析:

  1、用結構體來完成姓名、地址、郵編和電話的組合。

  2、結構體指針的使用。

  3、malloc的使用

  4、scanf函數的返回值是正確輸入的變量個數

程序代碼如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 #define ZIPLEN  10
 6 #define PHONLEN 15
 7 
 8 struct stu
 9 {
10     char
*name; //姓名 11 char *address; //地址 12 char zip[ZIPLEN]; //郵政編碼 13 char phone[PHONLEN]; //電話號碼 14 }; 15 16 int readstu(struct stu *dpt); /* 函數readstu用於輸入一個通信錄函數 */ 17 int writestu(struct stu *dpt); /* 函數writestu用於輸出通訊錄 */ 18 19 int main() 20 { 21 struct stu p[2]; /*
示例用,只有兩個元素的數組*/ 22 int i,j; 23 for(i=0; i<2;i++)readstu(p+i); 24 for(j=0; j<i; j++) 25 writestu(p+j); 26 puts("\n Press any key to quit..."); 27 return 0; 28 } 29 30 int readstu(struct stu *dpt) 31 { 32 int len; 33 char buf[120]; 34 35 printf("\nPlease input the Name:\n
"); 36 if(scanf("%s",buf) == 1) 37 { 38 len = strlen(buf); 39 dpt->name = (char *)malloc(len+1); 40 strcpy(dpt->name,buf); 41 } 42 else 43 return 0; 44 printf("Please input the Address:\n"); 45 if(scanf("%s",buf) == 1) 46 { 47 len = strlen(buf); 48 dpt->address = (char *)malloc(len+1); 49 strcpy(dpt->address, buf); 50 } 51 else 52 { 53 free(dpt->name); 54 return 0; 55 } 56 printf("Please input the Zip code:\n"); 57 if(scanf("%s",buf) == 1) 58 strncpy(dpt->zip,buf,ZIPLEN-1); 59 else 60 { 61 free(dpt->name); 62 free(dpt->address); 63 return 0; 64 } 65 printf("Please input the Phone number:\n");/*輸入電話號碼*/ 66 if(scanf("%s",buf)==1) 67 strncpy(dpt->phone,buf,PHONLEN-1); 68 else 69 { 70 free(dpt->name); 71 free(dpt->address); 72 return 0;/*Ctrl+Z結束輸入*/ 73 } 74 return 1; 75 } 76 77 int writestu(struct stu *dpt) 78 { 79 printf("Name : %s\n", dpt->name); 80 printf("Address : %s\n", dpt->address); 81 printf("Zip : %s\n", dpt->zip); 82 printf("Phone : %s\n\n",dpt->phone); 83 }

C語言實例解析精粹學習筆記——32