Łapka LogoŁapka Infa
🌐
Algorytmy

C++ (4/4): Strumienie Plikowe fstream

Odczyt zadań z dysku. ifstream oraz ofstream pod lupą. Jak upewnić się, że program nie pomyli się przy wczytywaniu.

C++ (4/4): Wczytywanie i Zapis (fstream)

Doszliśmy do etapu integracji Twojej aplikacji z plikami rozesłanymi przez Centralną Komisję Egzaminacyjną (CKE). Do pracy z plikami na dysku twardym C++ używa biblioteki strumieni plików - <fstream> (File Stream).

1. Jak to rozumieć?

W 1 lekcji uczyliśmy się standardowych strumieni: cin >> (z klawiatury) i cout << (na monitor). fstream działa IDENTYCZNIE. Daje nam do dyspozycji:

  • ifstream (Input File Stream) -> odpowiednik cin >>, ale działa potajemnie na pliku w folderze!
  • ofstream (Output File Stream) -> odpowiednik cout <<, ale "drukuje" wyniki do ukrytego pliku tekstowego na uśpionym dysku twardym, zamiast przed oczy!

2. Podstawowy Odczyt Pliku (Standard na Maturze)

Utworzymy pętlę, która wsysa słowa z pliku tak długo, aż dotknie dna pliku (ang. End of File - EOF).

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    // 1. Deklaracja i otwarcie strumienia wejściowego (plik musi leżeć w tym samym folderze co skompilowany plik exe!)
    ifstream plik("dane_maturalne.txt");
    
    // Sprawdzamy zabezpieczenie. Co, jeśli zapomnieliśmy go przenieść i program go nie znalazł?
    if (!plik.good()) {
        cout << "BŁĄD: Nie znaleziono pliku! Wrzuciles go obok *.exe?" << endl;
        return 1; // Zwróć 1 (błąd dla systemu Windows).
    }
    
    string linijka;
    int licznik = 0;
    
    // 2. Petla While - Magiczna Komenda C++
    // Warunek mowi: "Wsysaj strzalkami >> z obiektu 'plik' prosto w zmienna 'linijka'. 
    // Rob to dopoki (while) akcja ta w ogole dziala i jest udana."
    while (plik >> linijka) {
        
        // Zrob cos ze wczytanym slowem, np. wyswietl pierwsze 5
        if (licznik < 5) {
            cout << "Pobralem slowo: " << linijka << endl;
        }
        licznik++;
    }
    
    // 3. WAZNE: Zawsze na koniec posprzataj biurko. Zamknij ksiazke z danymi, zdejmujac kłodke dla innych aplikacji.
    plik.close();
    
    cout << "Skonczylem. Przeczytalem w sumie " << licznik << " slow!" << endl;
    return 0;
}

3. Zapis (Zrzut) odpowiedzi do pliku tekstowego 🪤

Egzamin każe stworzyć plik wyniki4.txt i przepisać do niego odpowiedzi w formacie: "Odpowiedź 4.1: XXX". Bardzo ważne jest to, by odpowiednio skleić stringi w strumieniu!

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    
    // Deklarujemy Strumien Wyjsciowy
    ofstream plikWynikowy("wyniki4.txt");
    
    int suma = 4500;
    string ukryteSzyfry = "HASLOMATURALNE";
    
    // Sklejamy to doslownie tak samo jak dzialalismy w 'cout <<' !
    plikWynikowy << "Odpowiedz z zadania 4.1 to: " << suma << endl;
    plikWynikowy << "Rozszyfrowane wyrazy: " << ukryteSzyfry << endl;
    
    // Zamykamy
    plikWynikowy.close();
    
    cout << "Zrobione! Plik 'wyniki4.txt' pojawil sie na dysku." << endl;
    
    return 0;
}

Opanowałeś absolutne fundamenty składni, pętli i wejścia/wyjścia (I/O). Od tej pory 100% twojego skupienia powinno przejść na sam dział Algorytmów. C++ nie będzie już stawiał barier kompilacji, stał się tylko przekaźnikiem potęgi Twojego analitycznego umysłu w dziedzinie ciągów, Euklidesów i szyfrów Cezara. Powodzenia na egzaminie z nową odwagą!