标签:
gets(),fgets()
scanf("%d",&a)若接受形如
2
这样的输入后,缓冲区内会留一个\n,此后若调用gets等函数时会读出这个换行出现错误,需注意
fgets(),gets()读到\n处会停止,从而缓冲区内会留下一个\n,从而使以后的输入出现错误,需要用getchar()等方式处理掉
对各种方式的gets(),fgets()的测试:
测试例程:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<queue> 6 7 using namespace std; 8 9 #define N 51 10 #define A 105 11 12 char maze[N][N]; 13 int g[A][A]; 14 int x,y; 15 16 int main() 17 { 18 int count; 19 scanf("%d",&count); 20 while (count--) 21 { 22 memset(maze,-1,sizeof(maze)); 23 scanf("%d%d\n",&x,&y); 24 for (int i=0;i<y;i++) 25 { 26 fgets(maze[i],x+1,stdin); 27 // getchar(); 28 } 29 30 } 31 return 0; 32 }
测试数据:
2
6 5
### (每行6个字符,包括空格,不包括换行符)
#A#A##
# # A#
#S ##
#####
每行后均有换行符
测试:
maze全初始化为-1
由测试结果可知:gets():当读到换行符时停止,换行符一起读出缓冲区并写入字符串末尾
fgets(char*,int num,FILE*):最多读入num-1个字符,并将第num位置为\0(若读入字符小于num-1个,则读入\n或EOF后将其之后一位置为\0,结束)(若读到换行符,换行符也写入文件末尾)
标签:
原文地址:http://www.cnblogs.com/giddens/p/4520601.html