想知道为什么会这样?

根据图二,再调试的过程中我发现a得到了4并j++但在我准备再次输入a字符,发现无法读入直接又去判断了并a=='\n'自动成立,导致i++.(随后我想到了可以用getchar()吃掉)

int main()
{
char a;
int i=0,j=0;
while ((a=getchar())!='a')
{
if(a=='\n')
{
i++;
}
else
{
j++;
}
}
printf("i=%d j=%d",i,j);
return 0;
}

img

img

从键盘输入的数据会进入一个叫做“缓冲区”的地方。
getchar是从“”缓冲区“中拿东西,会停在空格或者回车之前。
所以当输入4和回车时,题主所写代码中的getchar将4拿走,回车仍然在缓冲区,下一个getchar会将其拿走

如果想处理这种情况,可以这么写:

#include <stdio.h>

int main()
{
    char a;
    int i = 0, j = 0;
    while ((a = getchar()) != 'a')
    {
        int tmp = 0;

        if (a == '\n')
        {
            i++;
        }
        else
        {
            j++;
        }

        while (tmp = getchar() != '\n')
        {
            ;
        }

    }
    printf("i=%d j=%d", i, j);
    return 0;
}

测试结果如下:

img


还有什么不懂的可以问我