码迷,mamicode.com
首页 > 其他好文 > 详细

fgets注意事项

时间:2019-08-20 22:05:43      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:get   mic   mamicode   color   注意事项   getchar   char   alt   自动   

技术图片

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

}

 

技术图片

 

fgets注意事项

标签:get   mic   mamicode   color   注意事项   getchar   char   alt   自动   

原文地址:https://www.cnblogs.com/yangguang-it/p/11385565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!