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

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

时间:2015-05-21 21:55:25      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

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 }
View Code

测试数据:

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,结束)(若读到换行符,换行符也写入文件末尾)

        

        

 

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

标签:

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

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