gets(),fgets()的作用机制探究

gets(),fgets()

scanf("%d",&a)若接受形如

2

这样的输入后,缓冲区内会留一个 ,此后若调用gets等函数时会读出这个换行出现错误,需注意

fgets(),gets()读到 处会停止,从而缓冲区内会留下一个 ,从而使以后的输入出现错误,需要用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
",&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 }
View Code

测试数据:

2
6 5
###   (每行6个字符,包括空格,不包括换行符)
#A#A##
# # A#
#S ##
#####

每行后均有换行符

测试:

maze全初始化为-1

由测试结果可知:gets():当读到换行符时停止,换行符一起读出缓冲区并写入字符串末尾

        fgets(char*,int num,FILE*):最多读入num-1个字符,并将第num位置为(若读入字符小于num-1个,则读入 或EOF后将其之后一位置为,结束)(若读到换行符,换行符也写入文件末尾)

        

        

原文地址:https://www.cnblogs.com/giddens/p/4520601.html