关于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的整型部分呢?请求高手解答一下过程的分析。 展开
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的整型部分呢?请求高手解答一下过程的分析。 展开
2个回答
展开全部
C++输入cin详解
输入原理:
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入
在读取整数9后遇到.发生赋值错误,导致循环结束。
输入原理:
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入
在读取整数9后遇到.发生赋值错误,导致循环结束。
追问
您的意思也就是说,cin在缓冲区中读取到9的时候仍然没有错误,所以循环继续进行,然后读取到.时发生错误,导致循环结束?
展开全部
稍微改了一下:
#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是整形,你输入一个浮点型数据他是不会给你四舍五入的,只会保留整数部分,这样算是一个隐式的类型转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询