fgets注意事項

這是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;

}

 

相關文章
相關標籤/搜索