C语言中 gets 函数输入字符串,不能放在循环中 重复输入是怎么回事,程序如下

#include<stdio.h>#include<string.h>intmain(){charstr[5];while(1){printf("[gets]str=")... #include<stdio.h>
#include<string.h>
int main()
{
char str[5];
while(1)
{
printf("[gets]str=");
gets(str);
printf("gets:str:%s,length:%d\n",str,strlen(str));
printf("scanf,str=");
scanf("%s",str);
printf("scanf:str=%s\n",str,strlen(str));
if(str[0]=='f') break;
}
return 0;
}
结果:
[gets]str=asqwerq
gets:str:asqwerq,length:7
scanf,str=tyujrtyr
scanf:str=tyujrtyr
[gets]str=gets:str:,length:0
scanf,str=ertyert
scanf:str=ertyert
[gets]str=gets:str:,length:0
scanf,str=gyutyuk
scanf:str=gyutyuk
[gets]str=gets:str:,length:0
scanf,str=f
scanf:str=f
gets 输入第一次以后,就自动变成空了,不能输入了,但是scanf 还能输入,这是怎么回事
展开
 我来答
凝__若
推荐于2017-12-16
知道答主
回答量:16
采纳率:0%
帮助的人:12.3万
展开全部
#include<stdio.h>
#include<string.h>
int main()
{
char str[5];
while(1)
{
printf("[gets]str=");
gets(str);
printf("gets:str:%s,length:%d\n",str,strlen(str));
printf("scanf,str=");
scanf("%s",str);
getchar();
printf("scanf:str=%s\n",str,strlen(str));
if(str[0]=='f') break;
}
return 0;
}
scanf输入后那个回车被gets(str)接收了,所以下次遇到gets就不再等待你输入,可以用getchar()把scanf输入后的回车接收就好了。 我运行过的,给最佳答案哦!
君子不器4110
2018-12-18
知道答主
回答量:26
采纳率:100%
帮助的人:8万
展开全部

每次使用了输入输出函数后,可以直接使用

fflush(stdin)//清空缓冲区

这样就可以避免上次的操作影响下次的输入输出。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yxj120600
2012-05-09 · TA获得超过246个赞
知道小有建树答主
回答量:471
采纳率:0%
帮助的人:276万
展开全部
if(str[0]=='f') break;
跳出循环了吧?!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式