根据图二,再调试的过程中我发现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;
}
从键盘输入的数据会进入一个叫做“缓冲区”的地方。
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;
}
测试结果如下: