8.2.1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°ΡΡ Π² ΡΠ°ΠΉΠ», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° (file stream), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ open(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ Π΅Π³ΠΎ ΠΎΡΠΊΡΡΡΠΈΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ (Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°. ΠΡΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΡΡΠ½ΠΊΡΠΈΡ open() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
ifstream in(ifile); // ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ifstream ΠΈ ΠΎΡΠΊΡΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»
ofstream out; // ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ in ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π°, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ifile. ΠΠΎΠ΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ out ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΠ΅ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΠΎ Π½ΠΎΠ²ΠΎΠΌΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΠΊΠ°ΠΊ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° string, ΡΠ°ΠΊ ΠΈ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ Π² ΡΡΠΈΠ»Π΅ Π‘ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 3.5.4). ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ Π² ΡΡΠΈΠ»Π΅ Π‘.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ fstream Π²ΠΌΠ΅ΡΡΠΎ iostream&ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 8.1, ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ΅Ρ ΠΌΠ΅ΡΡΠ°Ρ , Π³Π΄Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΡΠ°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΡΡΠ»ΠΊΡ (ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ) Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΈΠΏΠΎΠ² iostream, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Ρ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° fstream (ΠΈΠ»ΠΈ sstream). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ ΡΡΡΠ»ΠΊΡ ostream&, ΡΠΎ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ofstream, ΡΠΎ ΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΡΠ»ΠΊΠ΅ istream& ΠΈ ΡΠΈΠΏΡ ifstream.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΠΈ read() ΠΈ print() (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 7.1.3) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ». Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ main() (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 6.2.5):
ifstream input (argv[1]); // ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΏΡΠΎΠ΄Π°ΠΆ
ofstream output(argv[2]); // ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» Π²ΡΠ²ΠΎΠ΄Π°
Sales_data total; // ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠΌΠΌΡ
if (read(input, total)) { // ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ
Sales_data trans; // ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ
// ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
while(read(input, trans)) { // ΡΠΈΡΠ°ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
if (total.isbn() == trans.isbn()) // ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ isbn
total.combine(trans); // ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΡΠΌΠΌΡ
else {
print(output, total) << endl; // ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
total = trans; // ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠ½ΠΈΠ³Ρ
}
}
print (output, total) << endl; // ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ
} else // Π²Π²ΠΎΠ΄Π° Π½Π΅Ρ
cerr << "No data?!" << endl;
ΠΡΠΎΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ΅Π½ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 7.1.1. ΠΠ°ΠΆΠ½Π΅ΠΉΡΠ°Ρ ΡΠ°ΡΡΡ β Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ read() ΠΈ print(). ΠΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° fstream, Ρ ΠΎΡΡ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ istream& ΠΈ ostream& ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
Π€ΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ open() ΠΈ close()ΠΠΎΠ³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Π²ΡΠ·Π²Π°Π² ΡΡΠ½ΠΊΡΠΈΡ open(), Π΅Π³ΠΎ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°ΡΡ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ:
ifstream in(ifile); // ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ifstream ΠΈ ΠΎΡΠΊΡΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»
ofstream out; // ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Π½ΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌ
// ΡΠ°ΠΉΠ»ΠΎΠΌ
out.open(ifile + ".copy"); // ΠΎΡΠΊΡΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»
ΠΡΠΈ Π½Π΅ΡΠ΄Π°ΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ open() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π±ΠΈΡ failbit (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 8.1.2). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ open() ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ΡΠ΄Π°ΡΡ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΅Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΡ:
if (out) // ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ open
// Π²ΡΠ·ΠΎΠ² ΡΡΠΏΠ΅ΡΠ΅Π½, ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΠΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° cin Π² ΡΡΠ»ΠΎΠ²ΠΈΠΈ. ΠΡΠΈ Π½Π΅ΡΠ΄Π°ΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ open() ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΈ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΡΠ°ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ in.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΊΡΡΡ, ΠΎΠ½ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ open() Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΠΎΡΠΊΡΡΡ, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π±ΠΈΡΠ° failbit. ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΠΎΡΠ΅ΡΠΏΡΡ Π½Π΅ΡΠ΄Π°ΡΡ. Π§ΡΠΎΠ±Ρ ΡΠ²ΡΠ·Π°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΊΡΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ». ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ» Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΡΠ½ΠΎΠ²Π°:
in.close(); // Π·Π°ΠΊΡΡΡΡ ΡΠ°ΠΉΠ»
in.open(ifile + "2"); // ΠΎΡΠΊΡΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ»
ΠΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ open() ΡΡΠΏΠ΅ΡΠ΅Π½, ΠΏΠΎΡΠΎΠΊ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ good() Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠ½ΠΊΡΠΈΡ main() ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 6.2.5). Π£ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΊΠ»:
// Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ°ΠΉΠ»Π°
for (auto p = argv + 1; p != argv + argc; ++p) {
ifstream input(*p); // ΡΠΎΠ·Π΄Π°Π΅Ρ input ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ»
if (input) { // Π΅ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ Π½Π΅Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π³ΠΎ
process(input);
} else
cerr << "couldn't open: " + string(*p);
} // input Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ
ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ifstream ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ input ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΡΠΏΠ΅Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ open(). ΠΡΠ»ΠΈ Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²Π²ΠΎΠ΄. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡ input ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ Π΄Π»Ρ ΡΠΈΠΊΠ»Π° while, ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 5.4.1). ΠΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ fstream Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΠ°ΠΉΠ», ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΈΠ²ΡΠ·Π°Π½, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ. ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ input ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ½ΠΎΠ²Π°.
ΠΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° fstream ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ close().
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π° 8.2.1Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 8.4. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» ΠΈ ΡΠΈΡΠ°Π΅Ρ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π² Π²Π΅ΠΊΡΠΎΡ ΡΡΡΠΎΠΊ, ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²Π΅ΠΊΡΠΎΡΠ°.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 8.5. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΠ»ΠΎΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 8.6. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ½ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 7.1.1 ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠΈΡΠ°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π°. ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ main() (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 6.2.5).
8.2.2. Π Π΅ΠΆΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΡΠ°ΠΉΠ»Π° (file mode), ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°. Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΡΠ°ΠΉΠ»Π° ΠΈ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² ΡΠ°Π±Π». 8.4.
Π’Π°Π±Π»ΠΈΡΠ° 8.4. Π Π΅ΠΆΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°
in ΠΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° out ΠΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° app ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π° ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ ate ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΊΡΡΡΠΈΡ trunc Π£ΡΠ΅ΠΊΠ°Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ binary ΠΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅Π Π΅ΠΆΠΈΠΌ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΡΠΊΡΡΡΠΈΠΈ ΡΠ°ΠΉΠ»Π°, Π±ΡΠ΄Ρ ΡΠΎ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ open() ΠΈΠ»ΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΉΠ»Π°. Π£ ΡΠ΅ΠΆΠΈΠΌΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ, Π΅ΡΡΡ ΡΡΠ΄ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.
β’ Π Π΅ΠΆΠΈΠΌ out ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠΏΠ° ofstream ΠΈΠ»ΠΈ fstream.
β’ Π Π΅ΠΆΠΈΠΌ in ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠΏΠ° ifstream ΠΈΠ»ΠΈ fstream.
β’ Π Π΅ΠΆΠΈΠΌ trunc ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΆΠΈΠΌ out.
β’ Π Π΅ΠΆΠΈΠΌ app ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ trunc. ΠΡΠ»ΠΈ ΡΠ΅ΠΆΠΈΠΌ app ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΡΠ°ΠΉΠ» Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΠ²ΠΎΠ΄Π°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠ²Π½ΠΎ.
β’ ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠ», ΠΎΡΠΊΡΡΡΡΠΉ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ out, ΡΡΠ΅ΠΊΠ°Π΅ΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π½Π΅ Π·Π°Π΄Π°Π½ ΡΠ΅ΠΆΠΈΠΌ trunc. Π§ΡΠΎΠ±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°, ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ out, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΆΠΈΠΌ app, ΡΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΆΠΈΠΌ in, ΡΠΎΠ³Π΄Π° ΡΠ°ΠΉΠ» ΠΎΡΠΊΡΠΎΠ΅ΡΡΡ ΠΈ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π°, ΠΈ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 17.5.3.