Clasa a IX-a · Fișiere textRead in English

Citirea până la sfârșitul fișierului în C++

În engleză: Reading until the end of the file

O(n)C++1736 de linii1 exemplufolosește date.in / date.out

Ideea

Fișierul date.in conține numere întregi, dar nu știm câte. Expresia fin >> x întoarce „adevărat” cât timp citirea reușește și „fals” la sfârșitul fișierului, deci poate fi chiar condiția buclei. În date.out se scriu câte numere au fost și suma lor.

Descrierea în engleză

The file date.in contains integers, but we do not know how many. The expression fin >> x returns 'true' as long as reading succeeds and 'false' at the end of the file, so it can be the loop condition itself. date.out receives how many numbers there were and their sum.

Complexitate
O(n)
Clasa
Clasa a IX-a (Grade 9)

Exemple

Exemplul 1

Intrare (date.in)

3 8 -1
10

Ieșire așteptată (date.out)

4 20

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

citire-pana-la-sfarsitul-fisierului.cpp
/*
 * Titlu: Citirea până la sfârșitul fișierului
 * Clasa: 9
 * Capitol: Fișiere text
 * Descriere: Fișierul date.in conține numere întregi, dar nu știm câte. Expresia
 *            fin >> x întoarce „adevărat” cât timp citirea reușește și „fals” la
 *            sfârșitul fișierului, deci poate fi chiar condiția buclei.
 *            În date.out se scriu câte numere au fost și suma lor.
 * Complexitate: O(n)
 *
 * Exemplu
 * Intrare:
 * 3 8 -1
 * 10
 * Ieșire: 4 20
 */
#include <fstream>
using namespace std;

int main()
{
    ifstream fin("date.in");
    ofstream fout("date.out");
    long long x, suma = 0;
    int numar = 0;
    while (fin >> x)
    {
        numar++;
        suma = suma + x;
    }
    fout << numar << ' ' << suma << '\n';
    fin.close();
    fout.close();
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.