您的位置:首页 > 其它

为什么循环里的gets()和fgets()在前面有一个scanf时,会跳过第一个的输出

2017-03-09 23:43 816 查看
今天在刷郑州轻工业oj上的题是碰到了一个关于字符串的,本来是水题一道十分钟就搞定的,结果卡了我一个小时。

有这样一段代码

int main(void)
{
int n;
char s[100] [100];
scanf("%d",&n);
for(i=0;i<n;i++)
gets(s[i]);//for循环会少进行一次
return 0;
}


当我给n赋值3的时候我却只能输入两个字符串,我百思不得其解啊。

后来才想明白当我给n赋值后摁下的回车符scanf是不会读取的,也就是会留在缓冲区,当进入第一次循环是gets会直接读取这个

换行符,也就是会直接结束读取,进入下一次循环,所以造成了少读取一次的错觉。只要再scanf后面加一个getchar()把换行符读取走即可,

或者是在%c前加一个空格 望大家引以为戒。

如果可以请关注下我的公众号(目前还在搭建,以后会不定时更新)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐