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