关于C++ While循环的一个问题

源代码如下intmain(){inta=0;intsum=0;while(std::cin>>a)sum+=a;std::cout<<"sum="<<sum<<std::... 源代码如下
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.9的整型部分呢?请求高手解答一下过程的分析。
展开
 我来答
百度网友c281b4c
2017-08-03 · TA获得超过2293个赞
知道大有可为答主
回答量:2382
采纳率:50%
帮助的人:1042万
展开全部
C++输入cin详解
输入原理:
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入
在读取整数9后遇到.发生赋值错误,导致循环结束。
追问
您的意思也就是说,cin在缓冲区中读取到9的时候仍然没有错误,所以循环继续进行,然后读取到.时发生错误,导致循环结束?
我3Q1
2017-08-03 · TA获得超过312个赞
知道小有建树答主
回答量:433
采纳率:65%
帮助的人:152万
展开全部

稍微改了一下:

#include<stdlib.h>
#include<iostream>
using namespace std;
int main()

int a = 0;
int sum = 0;
while(cin>>a)
{
if(sum>20){break;}
sum += a;
cout << "sum=" <<sum<<endl;
}
system("pause");
return 0;
}

加了个限制条件吧算是,然后你说的问题是因为数据类型的问题。

int是整形,你输入一个浮点型数据他是不会给你四舍五入的,只会保留整数部分,这样算是一个隐式的类型转换。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式