为什么我C语言中用gets输入比scanf输入会少输入一个字符串程序就给出结果了

 我来答
道祖一鸿钧
2013-05-11 · 超过21用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:21万
展开全部
你这个问题是因为你在输入n之后使用gets函数时,没用清空缓存池,scanf函数接收的数据不会清缓存,缓存中还有n这个数据,所以你在使用gets函数时第一个数接收的是n,后面接收四个,就刚好是五个数。可以使用fflush();函数清缓存。
White_MouseYBZ
2013-05-11 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6588万
展开全部
你追问中的那一行不能改成gets(n);,因为n是int型变量而不是数组名或数组指针!gets是专门接收字符串的函数,而scanf可以接收任何类型的变量,二者差异不小。
追问
标注的时候标错了 应该是把第一个for下面的scanf改成gets
追答
那一行中把scanf("%s",a[i])改成gets(a[i])是完全没有问题的,在输入不带间隔的字符串时是完全等价的。若输入有间隔的字符串,那么gets(a[i])能正确识别,而scanf("%s",a[i])将把间隔后的字符串认为是下一个字符串,而且会丢弃间隔。其他一样。不过要注意一下,因为前面的scanf("%d",&n);会把'\n'留在缓冲区,那么gets第一次只接收了一个'\n',所以会少一行。所以要在gets(a[i])前或在scanf("%d",&n)后加一句fflush(stdin)把缓冲区清空才能正确运行。注意一下,gets不会在缓冲区留下'\n',它接收'\n'并将其转换成'\0',而scanf("%s",X)是不接收'\n'的,把'\n'留在了缓冲区……
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-11
展开全部
那得看你的程序写成啥样的了,gets是整行读取的,如果缓冲区里有空的回号,也当一个空行输入了,scanf函数如果读取数字,会自动跳过一个空白区,等到非空白符才取数,这样的话会有些差异, 如果你能操制得好,就程序运行效果上应当没有差别的
更多追问追答
追问
#include
#include
int main(){
char a[1000][100],b[100];
int i,n,m=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",a[i]);}//把scanf改成gets,只能输入4行,程序就自动输出结果了,而原来应该是5行的,用scanf就对了//
scanf("%s",b);
for(i=0;i<n;i++){
if(strcmp(a[i],b)==0)
m++;
}
printf("%d\n",m);
return 0;
}
追答
程序错了啊,scanf("%d",&n);是读取一个整数存到变量n
你用gets就是读取一行,只能存于串里,得再转一下如
gets(a); n=atoi(a);
scanf("%s",a[i]); 非法操作了,a[i]只是一个字符变量,不是地址
scanf("%c",&a[i]); 读取一个字符放到a[i]
scanf("%s",&a[i]); 读一个串,放到a[i]为开始的位置

strcmp(a[i],b) 参数错误 strcmp(&a[i],b) 传入的应当是两个串地址,不能是字符变量值!!
都看不明白你这程序要干嘛的,错误太多了,猜不了啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲁忙忙
2013-05-11 · 超过13用户采纳过TA的回答
知道答主
回答量:116
采纳率:0%
帮助的人:54.7万
展开全部
gets函数只能输入单个字符 不能输入字符串
追问
......gets就是输字符串的好不 骚年
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LongYao切克闹
2013-05-11 · 超过25用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:66.4万
展开全部
你输入的时候带了回车的?gets会把你回车也读进去?
追问
那每输一个字符串就用一次回车换行  如果是因为回车的缘故 那我只能输入3行 但我可以输4行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式