注册 登录
编程论坛 C语言论坛

各位大神麻烦帮忙看一下

孙宇道 发布于 2020-08-10 20:54, 1611 次点击
我下面这段程序是测试stdinbuf中的'\n'的个数,最终统计结果为j,为什么输出j值是1不是3?麻烦各位大神帮忙看一下,本人小白一个
#include<stdio.h>
int main(void)
{
    int aa[10];
    int i,j=0;
    for (i = 0; i < 3; i++)
    {
        scanf_s("%d", &aa[i]);
        printf("%d", aa[i]);
    }
    while (getchar() == '\n')
    {
        j++;
        printf("%d", j);
    }
    return 0;
}
4 回复
#2
lin51616782020-08-10 21:04
输入1\n2\n3\n
第一次循环%d读取1
stdin滞留\n2\n3\n
第二次循环%d读取\n2
stdin滞留\n3\n
第三次循环%d读取\n3
stdin滞留\n
循环结束
开始执行getchar 读取\n
stdin空
第二次执行getchar 阻塞
#3
孙宇道2020-08-10 21:13
回复 2楼 lin5161678
输入1\n2\n3\n
第一次循环%d读取1
stdin滞留\n2\n3\n
第二次循环%d读取\n2
scanf() 会把 stdinBuff 中的特定格式数据取出,非特定格式数据则会留在stdinBuff 中;第二次循环难道不会直接跳过\n,直接读取2,然后将\n留在队列中?
#4
lin51616782020-08-11 11:33
回复 3楼 孙宇道
没有这样神奇的功能
#5
孙宇道2020-08-11 14:28
回复 4楼 lin5161678
大神的意思是每次读取stdinbuf中的数据都会使不符合格式的数据先出栈?
1