初学C++,关于While循环的一个小问题

int main()
{

int a = 0;
int sum = 0;
while(std::cin>>a)
sum += a;
std::cout << "sum=" <<sum<< std::endl;
return 0;
}
此时输入一个非整形数如9.9,则应当跳出循环才对,然而Sum仍然会加上9。
有些无法理解,请求各位指点

这是因为就算你输入的是浮点型数据,cin读入a的值,在while循环中不可能出现小数循环,会自动取整,你把a,sum定义为double类也是一样
图片说明

while判断的是输入是不是0,而不是判断输入是否整形。
想判断是不是整形可以通过读入数存入符点型a,再用a-(int)a判断是否大于0就知道输入的是不是符点型

因为你的sum类型是int,所以计算你输入的a是小数,但是在和sum进行运算的时候,会进行隐私类型转换,即转为int,最后的结果就没有小数了