Szöveges fájlok

Szöveges fájlok

A bemenet és kimenet célpontjaiként használjuk (a konzolablak helyett).

Az <fstream> fejállományban (header) található ifstream és ofstream típusokat használjuk fel.

Példa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ofstream kimenet("fajl.txt");
    ifstream bemenet("fajl-be.txt");

    int x;

    bemenet >> x;

    kimenet << x+1 << endl;

    return 0;
}

Fájl létrehozása Code::Blocks-ban: File / New / Empty File (vigyázzunk a kiterjesztésre)

Létező fájl hozzáadása: jobb click a projektre bal oldalon / Add files

Feladat

Beolvasunk két egész számot az “input.txt” fájlból. Az “output.txt” fájlba írjuk ki az összegüket, különbségüket, szorzatukat, osztási hányadosukat és maradékukat (a második szám ne legyen nulla).

Példa:

    input.txt:  10 3
    output.txt:
        13
        7
        30
        3
        1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ofstream kimenet("output.txt");
    ifstream bemenet("input.txt");

    int x, y;

    bemenet >> x >> y;

    kimenet << x + y << endl;
    kimenet << x - y << endl;
    kimenet << x * y << endl;
    kimenet << x / y << endl;
    kimenet << x % y << endl;

    return 0;
}

Sorozatok beolvasása fájlból

Adott az n természetes szám az “input.txt” fájlban, majd ezt követi n darab egész, melyek egy sorozat elemei. Írjuk ki a konzolra az elemek összegét!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream bemenet("input.txt");

    int n;
    bemenet >> n; // hány elem van

    int s = 0;

    // n-szer: beolvasunk és hozzáadjuk
    for (int i = 1; i <= n; i++) {
        int szam;
        bemenet >> szam;
        s = s + szam;
    }

    cout << s << endl;
    return 0;
}

HF

Az “input.txt”-ben adott az n pozitív egész, majd n darab eleme egy sorozatnak (egészek). írjuk ki a legkisebb és legnagyobb elemet a konzolablakba!

Példa:

    input.txt:
        5
        1 8 -2 3 7

    kimenet:
        legkisebb: -2
        legnagyobb: 8
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <fstream>
#include <iostream>
#include <climits>
using namespace std;

int main()
{
    ifstream bemenet("input.txt");

    int n;
    bemenet >> n;

    // Legkisebb elem meghatározása:
    /*
    int legkisebb = INT_MAX;

    for (int i = 1; i <= n; i++) {
        int szam;
        bemenet >> szam;

        if (szam < legkisebb)
            legkisebb = szam;
    }
    */

    // Másképp:
    /*
    int legkisebb;

    for (int i = 1; i <= n; i++) {
        int szam;
        bemenet >> szam;

        if (i == 1 || szam < legkisebb)
            legkisebb = szam;
    }
    */

    // Legnagyobb elem meghatározása:
    /*
    int legnagyobb = INT_MIN;

    for (int i = 1; i <= n; i++) {
        int szam;
        bemenet >> szam;

        if (szam > legnagyobb)
            legnagyobb = szam;
    }
    */
    
    // Legkisebb és legnagyobb elem meghatározása egyszerre:
    int legkisebb = INT_MAX;
    int legnagyobb = INT_MIN;

    for (int i = 1; i <= n; i++) {
        int szam;
        bemenet >> szam;

        if (szam < legkisebb)
            legkisebb = szam;

        if (szam > legnagyobb)
            legnagyobb = szam;
    }

    cout << legkisebb << endl;
    cout << legnagyobb << endl;
    return 0;
}

HF

Adott sorozatból kell a legkisebb páros és a legnagyobb páratlan szám. (Garantáltan lesz legalább egy páros és legalább egy páratlan.)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <fstream>
#include <iostream>
#include <climits>
using namespace std;

int main()
{
    ifstream bemenet("input.txt");

    int n;
    bemenet >> n;

    int legkisebb = INT_MAX;
    int legnagyobb = INT_MIN;

    for (int i = 1; i <= n; i++) {
        int szam;
        bemenet >> szam;

        if (szam % 2 == 0 && szam < legkisebb)
            legkisebb = szam;

        if (szam % 2 != 0 && szam > legnagyobb)
            legnagyobb = szam;
    }

    cout << legkisebb << endl;
    cout << legnagyobb << endl;
    return 0;
}

Elemek beolvasása, míg el nem fogynak

Nem tudjuk előre, hogy hány darab lesz, addig olvasunk, amíg lehet.

Például: írjuk ki, hogy hány elem van a fájlban és mennyi az összegük!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream bemenet("input.txt");

    int db = 0;
    int s = 0;

    int szam;
    while (bemenet >> szam) {
        // cout << szam << endl;
        db++;
        s = s + szam;
    }

    cout << db << endl;
    cout << s << endl;
    return 0;
}

HF

Hasonlóan, a fájl elemei közül határozzuk meg a legkisebbet és legnagyobbat (szintén nem tudjuk előre, hogy hány eleme van).