C語言實例解析精粹學習筆記——32
阿新 • • 發佈:2018-10-05
組合 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