首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

新手请问关于字符串fgets()函数

2012-06-22 
新手请教关于字符串fgets()函数我用的是Dev-c比如如下语句char a[5]fgets(a,5,stdin)printf(%s,a)fge

新手请教关于字符串fgets()函数
我用的是Dev-c
比如如下语句
char a[5];
fgets(a,5,stdin);
printf("%s",a);
fgets(a,5,stdin);
printf("%s",a);
return 0;
运行代码,当我输入012并回车后,会显示012,并会要求我再次输入,再输入012后同样会显示012.可是如果一开始我输入0123的就没有提示继续输入而是直接显示“请按任意键继续”。我想问这代码中的第二个fgets函数执行的时候是不是会对a进行重写,也就是覆盖之前第一个fgets写入a的内容?如果是的话我输入0123后即使填满了a的长度也应该提示我再次输入吧?
另外,书上说fgets函数调用的时候如果输入超过a数组能容纳的长度,超出的部分会储存在键盘缓冲区以备接下来读入,那如果我执行代码输入0123567并回车,其中0123在a的长度之内,剩下的567和回车键应该会通过第二个fgets再次写入a吧?

[解决办法]
你输入:0123回车
其实是输入了:0123\n

第一个fgets向buffer写入:0123\0,然后你打印0123.
第二个fgets向buffer写入\n\0,然后你打印\n。

就是你看到的123回车的打印结果了。
[解决办法]
fgets函数会把'\n'读入缓冲区里。因此,不要把'\n'排除在外,它也是缓冲区a的一个有效字符,在求其长度是'\n'算一个。

热点排行
Bad Request.