(一)多行输入,每行多个数字,空格分隔
链接:https://ac.nowcoder.com/acm/contest/320/G
计算一系列数的和
输入描述
输入数据有多组, 每行表示一组输入数据。 每行不定有n个整数,空格隔开。(1 <= n <= 100)。
输出描述:
每组数据输出求和的结果
示例1
输入
1 2 3 4 5 0 0 0 0 0
输出
6 9 0
这算是循环读输入里面比较麻烦的题目了。如果一行只有两个数,那么可以用while(cin >> a >> b)来循环读,或者如果只有1行,那么可以用 while(cin >> a) 来循环读。但是现在既有多行,每一行又有多个数,要怎么解决呢?
先看答案再解释:
#include<iostream>
using namespace std;
int main()
{
int a, sum;
while(cin >> a)
{
sum = 0;
while(true)
{
sum += a;
if(cin.get() == '\n') break;
cin >> a;
}
cout << sum << endl;
}
return 0;
}
首先解释下为什么 cin >> a 可以作为while循环的条件。 cin >> a这条语句的返回值其实是 >> 运算符的返回值,也就是左操作数cin,是输入流的引用,istream& 类型。而istream类型,它的父类重载了类型转换函数(),规定了如果读取失败,返回0,否则返回 void* this指针。因此,放在while循环里,会自动调用类型转换,从istream对象转换为一