gets和scanf的区别,我有一个例子求搞人指点一下

#include"stdio.h"voidmain(){chara[10],b;inti,sum=0;printf("iputyournumber:\n");gets(a... #include "stdio.h"
void main()
{
char a[10],b;
int i,sum=0;
printf("iput your number:\n");
gets(a);
printf("find:\n");
scanf("%c",&b);
for(i=0;a[i]!='\0';i++)
{
if(a[i]==b)
sum=sum+1;
}
printf("%d",sum);
}
当我用gets时能狗的出正确的答案,用scanf就会出现问题(第七句)
展开
 我来答
kaixingui2012
2012-12-19 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6390万
展开全部
gets()函数在输入结束时,回车确认键由函数接收并清理掉了。所以,接下来scanf("%c",&b);读一个字符时,会重新从键盘接收一个字符。
scanf("%s" , a )函数的输入结束是:当输入字符为空白字符时,如:空格、TAB键、回车键等结束当前变量的输入,而这个空白字符不做为函数的输入内容,也不处理,保存在缓存中,因此,当接下来scanf("%c",&b);读一个字符时,会从缓存中接收到那那个空白字符,因而导致程序运行不正常。解决办法:
一、在windows下,scanf("%c",&b);之前加上fflush(stdin);强制刷新缓存(丢弃缓存中的数据)
二、(在任何系统下都可以的方法)scanf("%c",&b);改为:do { scanf("%c",&b);} while( b=='\n' || b==' ' || b=='\t' ) ; //当然,这要求b不能是空白字符
三、强制要求每个scanf()都以回车结束,并增加回车处理,即在每个scanf()语句后增加一个回车键读取操作:scanf("%s" , a ) ; while( getchar()!='\n') ; 这样的效果会与gets相同,但区别在于:gets()中a中可以有空格,scanf()中a中没有空格
Purepromise
2012-12-19 · TA获得超过122个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:83.7万
展开全部
那个a那里应该是输入的字符串吧?
用gets是可以的,scanf应该也可以。
用scanf("%s",a);
注意是%s,而且a,不能是&a。
追问
这个我都试过,但是SCANF就是不能得出我的结果,不信兄台可以试试
追答
scanf("%s",a);
getchar();
这样就可以了。否则下面那个scanf(“%c”),就把上面漏掉的\n给读来了。
所以:有取单个字符的语句时,每个scanf后面都加一个getchar();写多了程序就知道了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pt...c@163.com
2012-12-19 · TA获得超过103个赞
知道答主
回答量:275
采纳率:0%
帮助的人:84.3万
展开全部
那是因为回车符的滞留问题,第二个scanf 把第一个scanf的回车符作为输入了, 在第一次输入以后 调用getchar函数,取出回车符,作为清空缓冲区,第二次就不会有问题了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
艾丫七安呐
2012-12-19 · 超过19用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:43.4万
展开全部
a是字符数组
b是单个字符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式