C语言问题,有关优先级,scanf返回值的

#include<stdio.h>
#include<stdlib.h>
int main()
{
int x,y;
while((y=scanf("%d",&x))==1)
{
printf("%d\n",x);
printf("%d\n",y);
}
printf("%d\n",y);

system("pause");
}

输入2.6,为何输出 2 1 0 而不是 2 1 1

scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
由于你输入的是 2.6,首先读入 2,输出:2 1
接着读入“ .”,要把一个字符赋值给整形变量,于是 scanf 函数出错了,成功赋值项数为 0,即 y=0,所以退出循环,输出:0。追问

只读 ". " 么? ".6"读不读?

追答

只读“.”,然后scanf 就出错了,无法再用它读进其他数据,除非fflush(stdin); 才可以。
“6 ”是读不到的,因为读到“.”之后已经退出了循环。

温馨提示:答案为网友推荐,仅供参考
相似回答