解释为什么用gets()会少输入一行字符串就能输出结果

while(cin>>n) 或者while(scanf('%d',&n)

 for(int i=0;i<n;++i)
    {    
    gets(s)或者 getline(cin,s);
     }

对于c语言的输入:

那一行中把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'留在了缓冲区……

对于c++

一定要在getline之前加入cin.ignore( ),清楚留在缓冲区内的endl,才能进行正确的输入。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值