为什么这两个显示结果不一样

#include
int main()
{
int a,b=0;
do{

scanf("%d",&a);

b++;

}while(getchar()=='\n');

/*
while(getchar()!='\n'){
scanf("%d",&a);
b++;
}
*/
printf("%d",b);
return 0;
}

do while是先执行do的语句再判断

一个先循环后判断,一个先判断后循环。先循环后判断的,无论什么条件,都会起码做一个循环。

while(){};与do{} while()的区别:前者先判断后循环,后者先循环后判断。这样的话do{} while()多执行了一次。

do while 和 while 的区别,循环次数不同。

while(getchar()!='\n')
{

scanf("%d",&a);
b++;
}
这段代码怎么样都是输出b=1;
getchar()读入你输入的第一个数;
sacnf读入你输入的第二个数;
但是scanf仅仅读入一个数而已,有一个回车符留在了IO缓冲当中(C primer plus);
这个缓冲被getchar读取 判定条件跳出循环;
而b++这条语句近执行了一次。

你可以认为while(){},先做变量变化,或者说先做系统变化,再判断系统状态;而do{} while()的先做系统状态判断,再让系统变化~

第一个是退出条件循环先执行后判断,第二个是入口条件循环,先判断后执行

今天这个问题怎么浮现出来了