给定若干行输入,每一行由若干个整数组成,要求对每行的整数进行求和,并输出每行的和。输入数据的行数未知,当输入结束时,程序停止。
1 2 3
4 5 6 7
8 9
6
22
17
本题与单行不定组输入的区别在于,我们需要处理多行输入,而不仅仅是单行输入。在单行不定组输入的情况下,我们只需要一次性读取整行数据并处理。而在多行输入的场景中,输入行数是不定的,程序需要循环不断读取每一行数据并分别进行处理。这就要求我们不仅要处理每行的数据,还需要在输入结束时能够识别并终止读取。具体请看代码实现!
#include <iostream>
#include <sstream>
using namespace std;
int main() {
    string line;
    while (getline(cin, line)) {  // 持续读取直到 EOF
        stringstream ss(line);
        long long num, sum = 0;
        while (ss >> num) {  // 逐个读取每一行的整数
            sum += num;
        }
        cout << sum << endl;  // 输出这一行的和
    }
    return 0;
}
getline(cin, line):使用 getline() 逐行读取输入,直到遇到文件结束符(EOF)。stringstream:使用 stringstream 对每行进行解析,并逐个提取其中的整数。while (cin) 循环会持续读取每一行输入,直到遇到 EOF。Scanner.hasNextLine()import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {  // 持续读取直到 EOF
            String line = sc.nextLine();
            String[] numbers = line.split(" ");
            long sum = 0;
            for (String num : numbers) {
                if (!num.isEmpty()) {  // 防止处理空字符串
                    sum += Long.parseLong(num);
                }
            }
            System.out.println(sum);  // 输出这一行的和
        }
    }
}
sc.hasNextLine():在循环中判断是否还有下一行输入,直到输入结束。split(" "):使用 split() 按空格分割每行输入,得到字符串数组。for line in sys.stdinimport sys
for line in sys.stdin:  # 持续读取直到 EOF
    numbers = map(int, line.split())  # 将每行按空格分割,并转换为整数
    print(sum(numbers))  # 输出该行的和
sys.stdin:使用 sys.stdin 来持续读取标准输入,直到 EOF。split():按空格分割输入行,并使用 map(int, ...) 将分割出的字符串转换为整数。sum():对分割出的整数列表进行求和。bufio.Scannerpackage main
import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)
func main() {
    scanner := bufio.NewScanner(os.Stdin)  // 创建读取器
    for scanner.Scan() {  // 持续读取直到 EOF
        line := scanner.Text()
        nums := strings.Fields(line)  // 按空格分割
        sum := 0
        for _, num := range nums {
            n, _ := strconv.Atoi(num)  // 将字符串转换为整数
            sum += n
        }
        fmt.Println(sum)  // 输出和
    }
}
scanner.Scan():使用 bufio.Scanner 持续读取每一行输入,直到遇到 EOF。strings.Fields():按空格分割每行输入,返回字符串数组。strconv.Atoi():将字符串数组转换为整数并进行求和。EOF 处理:
Ctrl+D 在 Linux/Mac 或 Ctrl+Z 在 Windows 来表示结束)。while(getline),Java 的 hasNextLine(),Python 的 sys.stdin,以及 Go 的 bufio.Scanner()。多行输入处理:
字符串分割与整数转换:
这个题目的重点是处理不定组的输入,使用合适的方法读取直到输入结束,并对每行进行解析和处理。通过这个题目可以熟练掌握各语言中处理多行不定输入的技巧。
本题属于以下题库,请选择所需题库进行购买