fgets注意事项
Posted yangguang-it
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
以上是关于fgets注意事项的主要内容,如果未能解决你的问题,请参考以下文章