這是yjy的習題庫,中途我在使用fgest時頗費了一點心思,特此記錄一下。數組
#include <stdio.h> #include <string.h> #include <stdlib.h> int main (void) { char (*arry)[6]; int n,tmp,i,j; char *find; scanf("%d",&n); getchar();/* sancf 輸入的時候會有換行符輸入,該函數是爲了吃掉\n,由於fegets遇到\n就結束*/ arry=(char (*)[6])malloc(n*sizeof(char)*6); for(i=0;i<n;i++) { /* fgets 讀到count-1個字符或者遇到\n就終止,因此這裏選擇6 * 6-1=5 因爲只會輸入4個有用字符(例如爲abcd),最後會有\n,此時字符數組中有 * 我輸入的4個字符a b c d + \n \0 有\n是由於fgets要吸取輸入時的\n,且fgets會 * 自動在最後加上\0。 * NOTE:使用fegts,輸入第二個參數時,建議爲輸入的有效字符+2,例如我這裏要輸入4個 * 有效字符,爲了容錯\n和\0 */ if(fgets(arry[i],6,stdin)==NULL) { return -1; } if((find=strchr(arry[i],'\n'))!=NULL) { *find='\0'; } /* 若是咱們把6改爲5,則須要把該屏蔽放開。 * 由於若是爲5,當輸入abcd四個字符時,feget就會結束,此時還有\n在輸入緩存區 * 因此須要getchar();吃掉\n。最後的arry[i]中是a b c d \0 結尾。 */ /* getchar(); */ } for(i=0;i<n;i++) { for(j=0;j<4/2;j++) { tmp=arry[i][j]; arry[i][j]=arry[i][3-j]; arry[i][3-j]=tmp; } printf("%s\n",arry[i]); } free(arry); return 0; }