Szöveges fájlok
az I/O (input/output) műveleteket
nem csak konzolról, hanem fájlok
segítségével is meg lehet valósítani
a fájlokat a programkód elején
megnyitjuk (megadva a nevét),
létrejön egy változó (ifstream vagy
ofstream típusú), ami azt a fájlt
jelképezi
kell majd: #include<fstream>
a továbbiakban a beolvasási és
kiírási műveletek a szokásosak
lecserélve a cin/cout objektumokat
a fájl(ok)at jelképező változókra
Bemeneti és kimeneti fájlok hozzáadása Code::Blocks projekthez:
- ha most hozzuk létre a fájlt, akkor a menüben File / New / Empty File,
majd lementjük (vigyázva, hogy ne adjon hozzá más kiterjesztést, mint
amit szerenénk, érdemes az All / . opciót választani a típusnál)
- ha létezik már a fájl csak hozzá szeretnénk adni a projekthez,
akkor a bal oldali panelen jobb klikk a projekt nevére, majd Add Files
menüopció
Példa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fajl_be("bemenet.txt");
ofstream fajl_ki("kimenet.txt");
int n;
fajl_be >> n;
fajl_ki << 2*n;
cout << "megcsinaltam..." << endl;
return 0;
}
|
Ha addig akarunk olvasni, míg el nem fogynak a fájlból az elemek
(tehát nem tudjuk előre, hogy hány darab lesz), akkor a beolvasási
műveletet használhatjuk egy ciklus feltételeként:
1
2
3
4
5
| ifstream bemenet("...");
int x;
while (bemenet >> x) {
// ...
}
|
Feladatok
1. Az input.txt fájlban adott egy n term. szám,
majd n darab egész, írjuk ki a konzolablakba az elemek átlagá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 <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream be("input.txt");
int n;
be >> n;
int osszeg = 0;
for (int i = 1; i <= n; i++) {
int szam;
be >> szam;
osszeg = osszeg + szam;
}
cout << (double)osszeg / n << endl;
return 0;
}
|
2. Az input.txt fájlban adottak számok, olvassuk
be mindet és írjuk ki a konzolablakba az átlagukat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream be("input.txt");
int osszeg = 0;
int n = 0;
int szam;
while (be >> szam) {
osszeg = osszeg + szam;
n++;
}
cout << (double)osszeg / n << endl;
return 0;
}
|
3. Adottak természetes számok egy fájlban. Keressük
meg és írjuk ki (a konzolra) a két legnagyobbat!
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
| #include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream be("input.txt");
int legnagyobb = -1;
int masodik = -1;
int szam;
while (be >> szam) {
if (szam > legnagyobb) {
masodik = legnagyobb;
legnagyobb = szam;
}
else if (szam > masodik) {
masodik = szam;
}
}
cout << legnagyobb << " " << masodik << endl;
return 0;
}
|
HF. a két legkisebb elem (feltéve, hogy egyik sem nagyobb 1000-nél).
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
| #include <iostream>
#include <fstream>
#include <climits>
using namespace std;
int main()
{
ifstream be("input.txt");
int legkisebb = INT_MAX;
int masodik = INT_MAX;
int szam;
while (be >> szam) {
if (szam < legkisebb) {
masodik = legkisebb;
legkisebb = szam;
}
else if (szam < masodik) {
masodik = szam;
}
}
cout << legkisebb << " " << masodik << endl;
return 0;
}
|
HF. a három legnagyobb elem.