为什么我C语言中用gets输入比scanf输入会少输入一个字符串程序就给出结果了
5个回答
追问
标注的时候标错了 应该是把第一个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) 传入的应当是两个串地址,不能是字符变量值!!
都看不明白你这程序要干嘛的,错误太多了,猜不了啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
gets函数只能输入单个字符 不能输入字符串
追问
......gets就是输字符串的好不 骚年
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你输入的时候带了回车的?gets会把你回车也读进去?
追问
那每输一个字符串就用一次回车换行 如果是因为回车的缘故 那我只能输入3行 但我可以输4行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询