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

    xiaoxiao2021-03-25  94

    今天在刷郑州轻工业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前加一个空格 望大家引以为戒。 如果可以请关注下我的公众号(目前还在搭建,以后会不定时更新)

    转载请注明原文地址: https://ju.6miu.com/read-17290.html

    最新回复(0)