Odczytywanie całego pliku txt

0

Witam. Mam tylko jedno pytanie.
Skąd program ma wiedzieć przy odczytywaniu całego pliku że ma odczytywać następne linijki tekstu?
Na jednym z kursów c++ jest taki kod:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    ifstream plik("C:/Nanoc/plik.txt");
 
    if(plik)
    {
         // Udało się otworzyć plik, a więc można rozpocząć odczytywanie
 
        string linia;     // Zmienna do przechowywania odczytanych wierszy tekstu
 
        while(getline(plik, linia))    // Jeśli jeszcze nie nastąpił koniec pliku, czytamy dalej
        {
 
            cout << linia << endl; // Wyświetlamy odczytany tekst w konsoli
                                   // Można też zrobić z nim coś innego
        }
    }
    else
    {
        cout << "BŁĄD: nie można otworzyć pliku do odczytu." << endl;
    }
 
    return 0;
}

Niby jest linijka: while(getline(plik, linia)) // Jeśli jeszcze nie nastąpił koniec pliku, czytamy dalej
ale skąd program wie że ma przejść do następnej linijki, a nie odczytuje ponownie tą samą linijkę?
Nie ma tu przecież żadnego licznika, ile wierszy jest w pliku.
while przecież przyjmuje wartość warunkową true albo false, a nie sprawdza ile linijek tekstu jest, i ile mu zostało jeszcze do odczytania.

Mógłby mi to ktoś wyjaśnić, jak to działa?

1

plik - w uproszczeniu to pewna struktura w której zapisano ile znaków z pliku odczytano (oraz inne pożyteczne informacje)

0

@adrian.widzew - nie trzeba być geniuszem żeby zrozumieć, że rezultat funkcji getline steruje pętlą.

0

Sorki, ale w kursach o getline nie miałem jeszcze, że można tym sterować pętlą. Do tej pory getline stosowałem tylko i wyłącznie jeśli chciałem wpisać jakieś zdanie do jakiejś zmiennej, a nie do pętli.

0

@adrian.widzew - kursy nie mają tu znaczenia, wystarczy kuknąć do dokumentacji i sprawdzić co ta funkcja zwraca; A skoro coś zwraca, to można nią sterować instrukcjami warunkowymi, pętlami itd.;

adrian.widzew napisał(a)

Do tej pory getline stosowałem tylko i wyłącznie jeśli chciałem wpisać jakieś zdanie do jakiejś zmiennej, a nie do pętli.

Przecież w podanym przez Ciebie kodzie wczytany z pliku łańcuch ląduje w zmiennej linia, a nie jest zwracany do pętli...

1 użytkowników online, w tym zalogowanych: 0, gości: 1