{ }codelper
EOFまで読む合計P0018

終わりまで足す

一行に一つずつ整数が与えられるが、何行あるかは知らされない。
入力が終わるまですべての数を読んで合計を出力せよ。
入力は少なくとも一行あり、空行はない。
最後の行の末尾には改行があることもないこともある。

入力
行数 1〜100,000、-10,000 ≤ 各数 ≤ 10,000
出力
合計を一行
例 1 · stdin
3
-1
10
stdout
12
例 2 · stdin
5
stdout
5
main.py
入力(stdin)

実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。

$ 準備完了

コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。

ほかの言語では?言語別の解答を見る · 8 言語の解答

「入力が終わった」に気づく方法は言語ごとに違います。
Python for line in sys.stdin:(終われば繰り返しが止まる — input() を呼び続けると EOFError)、Java BufferedReader.readLine() と C# Console.ReadLine() は終わりで null、C while (scanf("%d", &x) == 1)(終わりで EOF を返す)、C++ while (std::cin >> x)、JS・TS は入力全体を一度に読んで分ければ十分です。
Craykon は コンソール.行読み() が終わりで なし を返すので 間 (行 != なし) で回します。
C の古典的な落とし穴は while (!feof(stdin)) です — feof は読み込みが失敗した*後で*やっと真になるので、最後の改行の後で失敗した scanf のあとに残った x をもう一度足してしまいます(一つ目の例が 12 ではなく 22)。
前の問題のように最初の行を個数として読んではいけません。

Pythonmain.py · 6 行
import sys total = 0for line in sys.stdin:  # 입력이 끝나면 반복도 끝난다    total += int(line)print(total)
JavaScriptmain.js · 2 行
const nums = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);console.log(nums.reduce((s, x) => s + x, 0));
TypeScriptmain.ts · 3 行
import { readFileSync } from "node:fs";const nums: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);console.log(nums.reduce((s, x) => s + x, 0));
JavaMain.java · 13 行
import java.io.BufferedReader;import java.io.InputStreamReader; public class Main {    public static void main(String[] args) throws Exception {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        int total = 0;        String line;        // readLine()은 입력이 끝나면 null        while ((line = br.readLine()) != null) total += Integer.parseInt(line.trim());        System.out.println(total);    }}
C#Main.cs · 13 行
using System; class Program{    static void Main()    {        int total = 0;        string line;        // ReadLine()은 입력이 끝나면 null        while ((line = Console.ReadLine()) != null) total += int.Parse(line);        Console.WriteLine(total);    }}
C++main.cpp · 9 行
#include <iostream> int main() {    std::ios::sync_with_stdio(false);    std::cin.tie(nullptr);    int x, total = 0;    while (std::cin >> x) total += x; // 읽기에 실패하면(입력 끝) 거짓    std::cout << total << '\n';}
Cmain.c · 9 行
#include <stdio.h> int main(void) {    int x, total = 0;    /* scanf는 수를 읽은 개수를 돌려준다 — 입력이 끝나면 EOF(-1)라 1이 아니다 */    while (scanf("%d", &x) == 1) total += x;    printf("%d\n", total);    return 0;}
Craykonmain.cray · 8 行
합 = 0;줄 = コンソール.行読み();間 (줄 != なし){    합 += 줄.数に();    줄 = コンソール.行読み();}コンソール.書く(합);