Cum se configurează smartphone-uri și PC-uri. Portal informativ

C scrierea într-un fișier text. Citirea și scrierea unui fișier

Înainte de asta, când I/O date, am lucrat cu fluxuri standard - o tastatură și un monitor. Acum să ne uităm la modul în care limbajul C implementează primirea datelor din fișiere și scrierea lor acolo. Înainte de a efectua aceste operațiuni, trebuie să deschideți fișierul și să îl accesați.

În limbajul de programare C, un pointer de fișier este de tip FILE și declarația sa arată astfel:
FIȘIER * fișierul meu;

Pe de altă parte, funcția fopen () deschide fișierul la adresa specificată ca prim argument în modul citire ("r"), scrie ("w") sau adăugare ("a") și returnează un pointer către acesta în program. Prin urmare, procesul de deschidere a unui fișier și conectare la program arată astfel:
myfile = fopen ("hello.txt", "r");

Când citiți sau scrieți date într-un fișier, acesta este accesat printr-un indicator de fișier (în acest caz, myfile).

Dacă dintr-un motiv oarecare (nu există niciun fișier la adresa specificată, accesul la acesta este interzis) funcția fopen () nu poate deschide fișierul, atunci returnează NULL. În programele reale, eroarea de deschidere a unui fișier în ramura if este aproape întotdeauna gestionată, dar vom omite acest lucru în continuare.

Declarația funcției fopen () este conținută în fișierul antet stdio.h, deci trebuie inclusă. Tipul de structură FILE este de asemenea declarat în stdio.h.

După terminarea lucrării cu fișierul, se obișnuiește să-l închideți pentru a elibera tamponul de date și din alte motive. Acest lucru este deosebit de important dacă programul continuă să ruleze după ce ați lucrat cu fișierul. Ruperea conexiunii dintre un fișier extern și un pointer către acesta din program se realizează folosind funcția fclose (). Un indicator de fișier îi este transmis ca parametru:
fclose (fișierul meu);

Mai mult de un fișier poate fi deschis în program. În acest caz, fiecare fișier trebuie să fie asociat cu propriul său indicator de fișier. Cu toate acestea, dacă programul funcționează mai întâi cu un fișier, apoi îl închide, atunci indicatorul poate fi folosit pentru a deschide al doilea fișier.

Citirea și scrierea într-un fișier text

fscanf ()

Funcția fscanf () este similară în sensul funcției scanf (), dar spre deosebire de aceasta, primește intrare formatată dintr-un fișier, mai degrabă decât intrare standard. Funcția fscanf () preia parametri: un indicator de fișier, un șir de format, adresele zonelor de memorie pentru scrierea datelor:
fscanf (fișierul meu, „% s% d”, str, & a);

Returnează cantitatea de date citită cu succes sau EOF. Spațiile, caracterele newline sunt numărate ca separatori de date.

Să presupunem că avem un fișier care conține următoarea descriere a obiectelor:

Mere 10 23,4 banane 5 25,0 pâine 1 10,3

#include main () (FIȘIER * fișier; struct food (nume char [20]; unsigned qty; float price;); struct food shop [10]; char i = 0; fișier = fopen ("fscanf.txt", "r" ); în timp ce (fscanf (fișier, „% s% u% f”, magazin [i] .nume, & (magazin [i] .qty), & (magazin [i] .preț))! = EOF) (printf ("% s% u% .2f \ n ", magazin [i] .nume, magazin [i] .cantitate, magazin [i] .preț); i ++; ))

În acest caz, sunt declarate o structură și o matrice de structuri. Fiecare linie din fișier corespunde unui element al matricei; un element de matrice este o structură care conține un șir și două câmpuri numerice. Bucla citește o linie pe iterație. Când se întâlnește sfârșitul fișierului, fscanf () returnează EOF și bucla se termină.

fgets ()

Funcția fgets () este similară cu funcția gets () și preia intrare linie cu linie dintr-un fișier. Un apel fgets () va citi o linie. În acest caz, puteți citi nu întreaga linie, ci doar o parte din ea de la început. Parametrii Fgets () arată astfel:
fgets (char_array, numărul de caractere de citit, pointer_ la fișier)

De exemplu:
fgets (str, 50, myfile)

Un astfel de apel de funcție va citi din fișierul asociat cu indicatorul myfile o linie completă de text dacă lungimea acestuia este mai mică de 50 de caractere, ținând cont de caracterul „\ n”, pe care funcția îl va stoca și în matrice. Ultimul (al 50-lea) element din tabloul str va fi caracterul „\ 0” adăugat de fgets (). Dacă șirul este mai lung, funcția va citi 49 de caractere și va scrie „\ 0” la sfârșit. În acest caz, „\ n” nu va fi conținut în linia de citire.

#include #define N 80 main () (FIȘIER * fișier; char arr [N]; fișier = fopen ("fscanf.txt", "r"); while (fgets (arr, N, fișier)! = NULL) printf (" % s ", arr); printf (" \ n "); fclose (fișier); )

În acest program, spre deosebire de cel precedent, datele sunt citite linie cu linie în matricea arr. Când se citește următorul rând, cel precedent se pierde. Funcția fgets () returnează NULL dacă nu poate citi următoarea linie.

getc () sau fgetc ()

Funcția getc () sau fgetc () (ambele funcționează) vă permite să obțineți următorul caracter din fișier.

în timp ce ((arr [i] = fgetc (fișier))! = EOF) (dacă (arr [i] == " \ n ") (arr [i] = " \0 " ; printf ("% s \ n ", arr); i = 0; ) else i ++; ) arr [i] = " \0 " ; printf ("% s \ n ", arr);

Exemplul de cod afișează datele dintr-un fișier pe ecran.

Scrierea într-un fișier text

La fel ca și intrarea, ieșirea în fișier poate fi diferită.

  • Ieșire formatată. Funcția Fprintf (file_pointer, format_string, variabile).
  • Ieșire linie cu linie. Funcția fputs (șir, file_pointer).
  • Ieșire caracter cu caracter. Fputc () sau putc (char, file_pointer).

Următoarele sunt exemple de cod care utilizează trei moduri de a scoate date într-un fișier.

Scrierea câmpurilor dintr-o structură pe fiecare linie a fișierului:

fișier = fopen ("fprintf.txt", "w"); în timp ce (scanf ("% s% u% f", magazin [i] .nume, & (magazin [i] .qty), & (magazin [i] .preț))! = EOF) (fprintf (fișier, " % s% u% .2f \ n ", magazin [i] .nume, magazin [i] .cantitate, magazin [i] .preț); i ++; )

Ieșire linie cu linie într-un fișier (fputs (), spre deosebire de puts () în sine nu plasează „\ n” la sfârșitul liniei):

while (obține (arr)! = NULL) (fputs (arr, fișier); fputs (" \ n ", dosar); )

Un exemplu de ieșire caracter cu caracter:

while ((i = getchar ())! = EOF) putc (i, fisier);

Citirea și scrierea dintr-un fișier binar

Puteți lucra cu un fișier nu ca o secvență de caractere, ci ca o secvență de octeți. În principiu, este imposibil să lucrați diferit cu fișiere non-text. Cu toate acestea, puteți citi și scrie în fișiere text în acest fel. Avantajul acestui mod de accesare a unui fișier este viteza de citire-scriere: un acces poate citi/scrie un bloc semnificativ de informații.

Când deschideți un fișier pentru acces binar, al doilea parametru pentru fopen () este șirul „rb” sau „wb”.

Subiectul lucrului cu binare este destul de complex și necesită o lecție separată pentru a-l învăța. Aici vom observa doar particularitățile funcțiilor de citire și scriere într-un fișier, care este considerat ca un flux de octeți.

Funcțiile fread () și fwrite () iau ca parametri:

  1. adresa zonei de memorie din care sunt scrise sau citite datele,
  2. dimensiunea unui tip dat,
  3. cantitatea de date de citit de dimensiunea specificată,
  4. indicator de fișier.

Aceste funcții returnează numărul de date citite sau scrise cu succes. Acestea. puteți „comanda” citirea a 50 de elemente de date și obțineți doar 10. Nu vor exista erori.

Un exemplu de utilizare a funcțiilor fread () și fwrite ():

#include #include main () (FIȘIER * fișier; char shelf1 [50], shelf2 [100]; int n, m; fișier = fopen ("shelf1.txt", "rb"); n = fread (shelf1, sizeof (char), 50, fișier); fclose (fișier); fișier = fopen ("shelf2.txt", "rb"); m = fread (raft2, dimensiunea (char), 50, fișier); fclose (fișier); shelf1 [n] = " \0 " ; raft2 [m] = " \ n "; raft2 [m + 1] = " \0 " ; fișier = fopen ("shop.txt", "wb"); fwrite (strcat (shelf2, shelf1), sizeof (char), n + m, fișier); fclose (fișier); )

Aici, se încearcă citirea a 50 de caractere din primul fișier. N stochează numărul de caractere citite efectiv. N poate fi 50 sau mai puțin. Datele sunt puse într-un șir. Același lucru se întâmplă și cu al doilea fișier. Apoi, prima linie este atașată celei de-a doua, iar datele sunt aruncate în al treilea fișier.

Rezolvarea problemelor

  1. Scrieți un program care cere utilizatorului numele (adresa) unui fișier text, apoi îl deschide și numără numărul de caractere și linii din el.
  2. Scrieți un program care scrie date într-un fișier primit dintr-un alt fișier și modificat într-un fel sau altul înainte de a scrie. Fiecare linie de date primită dintr-un fișier trebuie să se încadreze într-o structură.

- comparație pentru a identifica egalitatea sau inegalitatea.

Scopul practic al unei enumerări este de a defini un set de constante simbolice diferite de tip întreg.

Un exemplu de utilizare a variabilelor enumerate:

mo = 1, tu, we, th, fr, sa, su) zile;

pune („Introduceți ziua săptămânii (de la 1 la 7):”); scanf ("% d", & t_day);

w_day = su; start = lună;

sfârşit = w_day -t_day;

printf („\ n Luni este % a zecea zi a săptămânii, \ acum % a zecea zi. \ n \

Mai sunt % d zile (zile) până la sfârșitul săptămânii. ”, Start, t_day, end);

Rezultatul programului: Introduceți ziua săptămânii (de la 1 la 7): 2

Luni este prima zi a săptămânii, acum a doua zi. Până la sfârșitul săptămânii 5 zile (zi).

18. Fișiere în limbaj C

Un fișier este un set de date situat pe un mediu extern și luat în considerare în procesul de prelucrare în ansamblu. Fișierele conțin date destinate stocării pe termen lung.

Există două tipuri de fișiere: text și binare. Fișierele text sunt o secvență de caractere ASCII și pot fi vizualizate și editate cu orice editor de text.

Fișierele binare (binare) sunt o secvență de date, a căror structură este definită programatic.

Limbajul C are un set mare de funcții pentru lucrul cu fișiere, dintre care majoritatea se află în bibliotecile stdio.h andio.h.

18.1. Deschiderea unui fișier

Fiecărui fișier i se atribuie un nume logic intern, care este folosit ulterior când se face referire la el. Numele logic (id-ul fișierului) este

un pointer către un fișier, de ex. în zona de memorie, care conține toate informațiile necesare despre fișier. Formatul pentru declararea unui pointer de fișier este următorul:

FIȘIER * pointer către fișier;

FILE este un identificator de tip structurat descris în biblioteca standard

stdio.h și care conține următoarele informații:

tip struct (

- numărul de octeți necitiți rămași în buffer;

dimensiunea obișnuită a memoriei tampon este de 512 octeți; de îndată ce nivelul = 0,

următorul bloc de date este citit în buffer din fișier;

- steag de stare a fișierului - citiți, scrieți, adăugați;

- descriptor de fișier, adică numărul care îi definește nu-

păstrare caracter nesemnat;

- caracter neangajat, i.e. simbol ungetc;

- dimensiunea tamponului intermediar intern;

buffer de caracter nesemnat;

- valoarea pointerului de accesat în interiorul bufferului, i.e.

specifică începutul bufferului, începutul liniei sau valoarea curentă

citirea indicatorului din interiorul bufferului, în funcție de mod

ma tamponare;

nesemnat char * curp;

- valoarea curentă a pointerului de accesat în interiorul bu-

fer, adică setează poziția curentă în buffer pentru schimb

mai departe cu programul;

istemp nesemnat;

- flag de fișier temporar;

- flag atunci când lucrați cu un fișier;

) DOSAR;

Înainte de a începe să lucrați cu fișierul, de ex. pentru a putea citi sau scrie informații într-un fișier, acesta trebuie să fie deschis pentru acces. Pentru aceasta, funcția este de obicei folosită

FILE * fopen (char * nume de fișier, char * mod);

ia reprezentarea externă - numele fizic al fișierului de pe suport (dischetă, hard disk) și îi atribuie un nume logic.

Numele fizic, adică numele fișierului și calea către acesta sunt specificate de primul parametru

- o linie, de exemplu, „a: Mas_dat.dat” - un fișier numit Mas_dat.dat situat pe o dischetă, „d: \\ work \\ Sved.txt” - un fișier numit Sved.txt situat pe hard unitate în directorul de lucru...

Atenţie! O bară oblică inversă (\), ca caracter special, este scrisă de două ori într-un șir.

La deschiderea cu succes, funcția fopen returnează un indicator de fișier (denumit în continuare indicator de fișier). Returnează NULL în caz de eroare. Această situație apare de obicei atunci când calea către fișierul deschis este specificată incorect. De exemplu, dacă specificați o cale care este interzisă pentru scriere în sala de clasă afișată a universității noastre (de obicei d: \ lucru \ este permis).

Al doilea parametru este un șir care setează modul de acces la fișier:

w - dosarul este deschis pentru scriere; dacă nu există niciun fișier cu numele specificat, atunci acesta va fi creat; dacă un astfel de fișier există, atunci informațiile anterioare sunt distruse înainte de deschidere;

r - fișierul este deschis numai pentru citire; dacă nu există un astfel de fișier, atunci apare o eroare;

a - fișierul este deschis pentru a adăuga informații noi până la sfârșit;

r + - fișierul este deschis pentru editarea datelor - sunt posibile atât scrierea, cât și citirea informațiilor;

w + - la fel ca pentru r +;

a + - la fel ca pentru a, doar scrierea poate fi efectuată oriunde în fișier; este disponibilă și citirea fișierelor;

t - fișierul este deschis în modul text; b - fișierul este deschis în modul binar.

Modul text diferă de modul binar prin faptul că, atunci când fișierul este deschis ca o pereche de caractere text „line feed”, „carriage return” este înlocuit cu un caracter: „line feed” pentru toate funcțiile de scriere a datelor în fișier, iar pentru toate funcțiile de ieșire caracterul „line feed „Este acum înlocuit cu două caractere:” line feed”, „carage return”.

În mod implicit, fișierul se deschide în modul text. Exemplu: FILE * f; - se declară un pointer către un fișier f;

f = fopen ("d: \\ work \\ Dat_sp.cpp", "w"); - se deschide spre scriere un fisier cu nume logic f cu nume fizic Dat_sp.cpp, aflat pe disc d, in directorul de lucru; sau mai pe scurt

FILE * f = fopen ("d: \\ work \\ Dat_sp.cpp", "w");

18.2. Închiderea dosarului

După ce ați lucrat cu fișierul, accesul la acesta trebuie să fie închis. Acest lucru se face de int fclose (pointer de fișier). De exemplu, din exemplul anterior, fișierul este închis astfel: fclose (f);

Pentru a închide mai multe fișiere, a fost introdusă o funcție, care se declară astfel: void fcloseall (void);

Dacă trebuie să schimbați modul de acces pentru un fișier, atunci mai întâi trebuie să închideți acest fișier, apoi să îl redeschideți, dar cu drepturi de acces diferite. Pentru a face acest lucru, utilizați funcția standard:

FILE * freeopen (car * nume_fișier, caracter * mod, FILE * indicator_fișier);

Această funcție închide mai întâi fișierul declarat file_pointer(cum face funcția fopen) și apoi deschide fișierul cu nume_fișier și permisiuni de mod.

Limbajul C are capacitatea de a lucra cu fișiere temporare care sunt necesare numai în timpul funcționării programului. În acest caz, se utilizează funcția

FILE * tmpfile (void);

care creează un fișier temporar pe disc cu drepturi de acces „w + b”, după terminarea programului sau după închiderea fișierului temporar, acesta este șters automat.

18.3. Scrierea - citirea informațiilor

Toate acțiunile de citire-scriere a datelor într-un fișier pot fi împărțite în trei grupe: operații de intrare-ieșire caracter cu caracter; operațiuni I/O pe linie; blocarea operațiunilor I/O.

Să luăm în considerare principalele funcții utilizate în fiecare dintre aceste trei grupuri de operații.

Caracter I/O

În funcțiile I/O caracter cu caracter, un caracter este primit dintr-un fișier sau un caracter este transmis într-un fișier:

Linia I/O

În funcțiile I/O de linie, există un transfer de la un fișier sau către

Bloc I/O

Funcțiile bloc I/O funcționează cu blocuri întregi

informație:

int fread (void * p, intsize,

- citește n blocuri de octeți de dimensiune fiecare din fișier

int n, FIȘIER * f)

la f în zona de memorie cu indicatorul p (obligatoriu

int fwrite (void * p, intsize,

pre-alocați memorie pentru blocul de citit);

- scrie n blocuri de octeți de dimensiune fiecare dintre

int n, FIȘIER * f)

zonă de memorie cu indicatorul p către fișierul f.

I/O formatat este produs de funcții.

Am învățat deja cum să scriem informații într-un fișier text. - Dacă nu ai învățat, vezi ultimul articol. Spune și descrie în detaliu

Dar dacă fișierul există deja și trebuie să citim informații din el pentru procesare? Din fericire, acest lucru este și destul de simplu. Permiteți-mi să vă reamintesc că există mai multe opțiuni pentru implementarea acestei sarcini, am descris doar una dintre ele. Descris este cel care din anumite motive personal mi se pare cel mai ușor de perceput.

#include

int main ()
{
char s1 //Variabila va citi șirul
ifstream în (“C: \\\ FromC \\ myfile.txt”); //Deschiderea fișierului pentru a citi informații
în >> s1; //citește rândul
în .close () //Închideți fișierul

cout<Afișarea valorii s1 pe ecran
returnează 0;
}

Iată cel mai simplu program pentru a citi prima linie dintr-un fișier text situat de-a lungul căii
C: \\\ DinC \\ fişierul meu.txt -
Deoarece aceasta este o continuare a ultimului articol, am decis să folosesc fișierul pe care l-am creat acolo. Probabil că nu ar trebui să fie dificultăți cu asta.
Dar să revenim la cod. Mai întâi, deschidem fișierul pentru a citi informațiile din acesta, pentru aceasta folosim comanda ifstream,între paranteze indicăm fie numele fișierului, fie calea către fișier, așa cum am făcut eu. („C: \\\ FromC \\ myfile.txt”);
Când am deschis fișierul pentru a citi ceva din el, am declarat o variabilă ca char -
char s1
Acum trebuie doar să atribuim valoarea șirului din fișier variabilei. Facem asta ca o echipă în
Acordați atenție suporturilor unghiulare în >>
De fapt, așa cum se vede din comentariile la codul programului, pentru ca variabila să atribuie valoarea citită, trebuie să o scriem după în >>
în >> s1;

Aceasta nu pare a fi o sarcină deosebit de dificilă, mai ales dacă ați stăpânit deja perfect și ați învățat cum să utilizați materialul articolului anterior - totul este absolut la fel, doar 2 comenzi sunt diferite

Crearea unui fișier și scrierea informațiilor în el C++

ofstream afară ( Nume de fișier );
afară<< (Șir scris);
afară.închide ();
=============================

Citirea textului dintr-un fișier și afișarea textului pe ecran în C++

ifstream în (Nume de fișier );
în>> (Citim rândul);
în.închide ();(Închide fișierul)
============================
Să scriem un program simplu care va citi textul introdus de la tastatură și îl va scrie într-un fișier:

#include
#include

int main ()
{
\\ 3 rânduri viitoare
clrscsr (); // Curățarea ecranului

cout<<“Wwedi pervuu stroku” ; cin >> a; endl;
cout<<“Wwedi wtoruu stroku” ; cin >> b; endl;
cout<<“Wwedi tretuu stroku” ; cin >> c; endl;
clrscr (); //

/ * Să începem să lucrăm cu fișierul * /
ofstream out („C: \\\ FromC \\ myfile.txt”); //Deschiderea fișierului pentru scriere
afară<Scriem primul rând
afară<Scriem a doua linie
afară<Scriem a treia linie
afară .închide (); //Închideți fișierul

// Setați variabilele la zero

pentru (int i = 0; i<=255 ;i ++)
(a = * “”; b = * “”; c = * “”;)


ifstream în („C: \\\ FromC \\ myfile.txt”);
în >> a >> b >> c; //Citim fiecare rând nou într-o nouă variabilă
în .închidere (); //Închideți fișierul

/* */

pentru (i = 0; a! = * „”; i ++)
{
dacă (i> dimensiunea (a)) pauză;
cout<

}
cout<<“\n” ; \\

/* */


{
dacă (i> dimensiunea (b)) pauză;
cout<
}
cout<<“\n” ; \\ Mutați cursorul pe o linie nouă

/* */

pentru (i = 0; с! = * „”; i ++)
{
dacă (i> dimensiunea (c)) pauză;
cout<<с ;
}

returnează 0;
}
===================

În exemplele de mai sus, există unul astfel IMENS defect. Dacă încercăm să introducem o linie care conține spații, atunci programul nu va funcționa așa cum avem nevoie. Probabil, nu numai eu, ci și mulți alți oameni am dat peste această eroare. Prin urmare, las codul dat incorect, astfel încât să puteți vedea ce ați putea întâlni.

Din moment ce nu există cărți acasă, am început din nou să caut pe internet și am dat peste o mulțime de tot felul de prostii complicate. Totuși, am găsit cumva o soluție la problema mea.
M-a ajutat să citesc asta cout sprijină metodele sale. Și pe Internet, toate sfaturile merg la utilizarea funcției getline Din fericire, am găsit foarte repede cum să folosesc această funcție și apoi am folosit-o în cod.
În general, merită menționat și descris această funcție, dar până acum nu o înțeleg cu adevărat, înțeleg doar că trebuie folosită și înțeleg cum, așa că dau un exemplu mai corect al programului nostru dezvoltat:

#include
#include

int main ()
{
char a, b, c; \\ 3 rânduri viitoare
clrscsr (); // Curățarea ecranului

/ * Introduceți valori pentru variabile * /

cout<<“Wwedi pervuu stroku” ; cin.getline (a, sizeof (a)); endl;
cout<<“Wwedi wtoruu stroku” ; cin.getline (a, sizeof (b)); endl;
cout<<“Wwedi tretuu stroku” ; cin.getline (a, sizeof (c)); endl;
clrscr (); //După introducerea valorilor, ștergeți ecranul

/ * Să începem să lucrăm cu fișierul * /
ofstream out („C: \\\ FromC \\ myfile.txt”); // Deschiderea fișierului pentru scriere
afară<
Scriem primul rând
afară<Scriem a doua linie
afară<Scriem a treia linie
afară .închide (); //Închideți fișierul

// Setați variabilele la zero

pentru (int i = 0; i<=255 ;i ++)
(a = * “”; b = * “”; c = * “”;)

/ * Continuăm să lucrăm cu fișierul * /

dacă flux în („C: \\\ FromC \\ myfile.txt”);
in.getline (a, sizeof (a));// A
in.getline (b, sizeof (b));// Citim o linie într-o variabilă b
in.getline (c, sizeof (c)); // Citim o linie într-o variabilă c
în .închidere (); //Închideți fișierul

/* Citim primul rând caracter cu caracter și îl afișăm pe ecran */

pentru (i = 0; a! = * „”; i ++)
{
dacă (i> dimensiunea (a)) pauză;
cout<

}
cout<<“\n” ; \\ Mutați cursorul pe o linie nouă

/* Citim a doua linie caracter cu caracter și o afișăm pe ecran */

pentru (i = 0; b! = * „”; i ++)
{
dacă (i> dimensiunea (b)) pauză;
cout<
}
cout<<“\n” ; \\ Mutați cursorul pe o linie nouă

/* Citim a treia linie caracter cu caracter și o afișăm pe ecran */

pentru (i = 0; с! = * „”; i ++)
{
dacă (i> dimensiunea (c)) pauză;
cout<<с[i];
}

getch (); \\Se așteaptă apăsarea tastei Enter
returnează 0;
}
===================

În acest material, este analizat un exemplu de citire a informațiilor personaj cu caracter. Din moment ce nu am descris cum să lucrez cu variabile precum char, atunci începătorii pot întâmpina unele inconveniente în perceperea codului. Doar că nu știam care este tipul char are unele particularități și cred că totul este mai simplu. Prin urmare, câteva puncte de neînțeles ale programului de mai sus pot fi citite în articolul următor. lucrul cu char v C++ pentru începători

În rest, exemplul dat despre cum să citești linii dintr-un fișier text în C++ ar trebui să fie disponibil și destul de ușor de înțeles. Aceasta nu este opțiunea optimă de implementare acum și am omis câteva puncte importante, dar din moment ce începem să învățăm limbajul C++, acest lucru este suficient deocamdată. Mai târziu, probabil că voi ajunge la punctul în care am ratat-o, dar acum trebuie să iau doar elementele esențiale.

Daca am inteles acest material impreuna cu tine inseamna ca am facut un mic pas catre profesionalismul nostru.

Notă:
pauză;- Aceasta este comanda care iese din buclă. Avem dacă contorul de cicluri pentru devine mai mare decât dimensiunea declarată a variabilei char, apoi ieșim forțat din buclă
!= – aceasta este condiția noastră. Această condiție este indicată de inegalitate
dacă (a! = b)- Citește ca și cum A nu este egal b

endl; - Aceasta este mutarea cursorului pe o nouă linie în interiorul consolei (din câte am înțeles)
Această comandă este similară cu „\ N”

Ultima actualizare: 31.10.2015

Clasă FileStream reprezintă capacitatea de a citi dintr-un fișier și de a scrie într-un fișier. Vă permite să lucrați atât cu fișiere text, cât și cu fișiere binare.

Să luăm în considerare cele mai importante proprietăți și metode ale sale:

    Proprietatea Length: returnează lungimea fluxului în octeți

    Proprietatea poziției: returnează poziția curentă în flux

    Metoda de citire: citește datele dintr-un fișier într-o matrice de octeți. Preia trei parametri: int Read (byte array, int offset, int count) și returnează numărul de octeți citiți cu succes. Următorii parametri sunt utilizați aici:

    • matrice - o matrice de octeți în care vor fi plasate datele citite din fișier

      offset reprezintă offset-ul, în octeți, în care vor fi plasați octeții citiți

      count este numărul maxim de octeți de citit. Dacă fișierul conține mai puțini octeți, atunci toți vor fi citiți.

    Metodă long Seek (offset lung, origine SeekOrigin): setează poziția în flux, compensată cu numărul de octeți specificat în parametrul offset.

    Metoda de scriere: scrie date dintr-o matrice de octeți într-un fișier. Ia trei parametri: Write (matrice de octeți, int offset, int count)

    • matrice - o matrice de octeți de unde datele vor fi scrise în fișier

      offset - offset în octeți în matrice de unde să începeți să scrieți octeți în flux

      count - numărul maxim de octeți de scris

FileStream reprezintă accesul la fișier la nivel de octet, deci, de exemplu, dacă trebuie să citiți sau să scrieți una sau mai multe linii într-un fișier text, atunci matricea de octeți trebuie convertită în șiruri de caractere folosind metode speciale. Prin urmare, alte clase sunt folosite pentru a lucra cu fișiere text.

În același timp, atunci când se lucrează cu diferite binare care au o structură specifică, FileStream poate fi foarte util pentru a prelua anumite informații și a le procesa.

Să ne uităm la un exemplu de citire-scriere într-un fișier text:

Console.WriteLine ("Introduceți o linie pentru a scrie în fișier:"); string text = Console.ReadLine (); // scrieți în fișier folosind (FileStream fstream = new FileStream (@ "C: \ SomeDir \ noname \ note.txt", FileMode.OpenOrCreate)) (// convertiți șirul în bytes byte array = System.Text.Encoding.Default . GetBytes (text); // scrierea unei matrice de octeți într-un fișier fstream.Write (array, 0, array.Length); Console.WriteLine ("Text scris într-un fișier");) // citirea dintr-un fișier folosind ( FileStream fstream = Fișier. OpenRead (@ "C: \ SomeDir \ noname \ note.txt")) (// convertiți șirul în bytes byte array = new byte; // citiți datele fstream.Read (matrice, 0, matrice .Length); // decodifică octeți în șirul textFromFile = System.Text.Encoding.Default.GetString (matrice); Console.WriteLine ("Text din fișier: (0)", textFromFile);) Console.ReadLine ();

Să aruncăm o privire la acest exemplu. Atât citirea cât și scrierea folosesc declarația using. Această declarație nu trebuie confundată cu directiva using, care include spații de nume la începutul fișierului de cod. Instrucțiunea using vă permite să creați un obiect într-un bloc de cod, după finalizarea căruia este apelată metoda Dispose a acestui obiect și, astfel, obiectul este distrus. În acest caz, variabila fstream servește ca un astfel de obiect.

Obiectul fstream este creat în două moduri diferite: prin constructor și printr-una dintre metodele statice ale clasei File.

Aici, doi parametri sunt trecuți constructorului: calea către fișier și enumerarea FileMode. Această enumerare indică modul de acces la fișier și poate lua următoarele valori:

    Adăugați: Dacă fișierul există, atunci textul este atașat la sfârșitul fișierului. Dacă fișierul nu există, atunci este creat. Fișierul este deschis doar pentru scriere.

    Creare: este creat un fișier nou. Dacă un astfel de fișier există deja, atunci este suprascris.

    CreateNew: este creat un nou fișier. Dacă un astfel de fișier există deja, atunci aplicația aruncă o eroare

    Deschide: deschide un fișier. Dacă fișierul nu există, se aruncă o excepție

    OpenOrCreate: dacă fișierul există, se deschide, dacă nu, se creează unul nou

    Trunchiați: dacă fișierul există, acesta este suprascris. Fișierul este deschis doar pentru scriere.

Metoda statică OpenRead a clasei File deschide un fișier pentru citire și returnează un obiect FileStream.

Constructorul FileStream are, de asemenea, o serie de supraîncărcări care vă permit să reglați mai fin obiectul pe care îl creează. Toate aceste versiuni pot fi vizualizate la msdn.

Atât scrierea, cât și citirea folosesc obiectul de codificare Encoding.Default din spațiul de nume System.Text. În acest caz, folosim două dintre metodele sale: GetBytes pentru a obține o matrice de octeți dintr-un șir și GetString pentru a obține un șir dintr-o matrice de octeți.

Drept urmare, linia pe care am introdus-o este scrisă în fișier notă.txt... De fapt, acesta este un fișier binar (nu un fișier text), deși dacă scriem doar o linie în el, vom putea vizualiza acest fișier într-o formă care poate fi citită, deschizându-l într-un editor de text. Cu toate acestea, dacă scriem octeți aleatori în el, de exemplu:

Fstream.WriteByte (13); fstream.WriteByte (103);

S-ar putea să avem probleme în a-l înțelege. Prin urmare, clasele separate sunt destinate să funcționeze direct cu fișiere text - StreamReader și StreamWriter.

Acces aleatoriu la fișiere

Nu este neobișnuit ca fișierele binare să reprezinte o structură specifică. Și, cunoscând această structură, putem lua informația necesară din fișier sau, dimpotrivă, putem scrie un anumit set de octeți într-un anumit loc din fișier. De exemplu, în fișierele wav, datele audio în sine încep cu 44 de octeți, iar până la 44 de octeți există diverse metadate - numărul de canale audio, rata de eșantionare etc.

Folosind metoda Seek () putem controla poziția cursorului de flux, pornind de la care este citit sau scris fișierul. Această metodă ia doi parametri: offset și poziția în fișier. Poziția în fișier este descrisă de trei valori:

    SeekOrigin.Begin: începutul fișierului

    SeekOrigin.End: sfârșitul fișierului

    SeekOrigin.Current: poziția curentă în fișier

Cursorul de flux din care să citiți sau să scrieți este deplasat înainte prin deplasare față de poziția specificată ca al doilea parametru. Offset-ul poate fi negativ, apoi cursorul se deplasează înapoi, dacă este pozitiv, apoi înainte.

Să luăm un exemplu:

Folosind System.IO; folosind System.Text; clasă Program (static void Main (șir argumente) (șir text = „hello world”; // scrieți în fișier folosind (FileStream fstream = new FileStream (@ "D: \ note.dat", FileMode.OpenOrCreate)) (// convertiți șirul în octeți de intrare byte = Encoding.Default.GetBytes (text); // scrieți tabloul de octeți în fișierul fstream.Write (input, 0, input.Length); Console.WriteLine ("Textul a fost scris în fișier"); // mutați indicatorul la sfârșitul fișierului, cinci octeți până la sfârșitul fișierului fstream.Seek (-5, SeekOrigin.End); // minus 5 caractere de la sfârșitul fluxului // citește patru caractere din poziția curentă ieșire octet = octet nou; fstream.Read ( ieșire, 0, output.Length); // decodifică octeții într-un șir textFromFile = Encoding.Default.GetString (ieșire); Console.WriteLine (" Text din fișier: (0)", textFromFile); // worl // înlocuiește în fișier cuvântul lume pentru cuvântul house șir replaceText = "house"; fstream.Seek (-5, SeekOrigin.End); // minus 5 caractere de la sfârșitul fluxului de intrare = Encoding.Default.GetBytes (replaceText); fstream.Write (inpu t, 0, intrare.Lungime); // citește întregul fișier // returnează pointerul la începutul fișierului fstream.Seek (0, SeekOrigin.Begin); ieșire = octet nou; fstream.Read (ieșire, 0, output.Length); // decodifică octeții într-un șir textFromFile = Encoding.Default.GetString (ieșire); Console.WriteLine ("Text din fișier: (0)", textFromFile); // salut casa) Consola.Citeste (); ))

Ieșire din consolă:

Text scris în fișier Text din fișier: worl Text din fișier: salut casă

Apelarea fstream.Seek (-5, SeekOrigin.End) mută cursorul fluxului înapoi la sfârșitul fișierelor cu cinci caractere:

Adică, după ce ați scris linia „hello world” într-un fișier nou, cursorul se va afla în poziția caracterului „w”.

După aceea, citim patru octeți care încep cu caracterul „w”. În această codificare, 1 caracter va reprezenta 1 octet. Prin urmare, citirea a 4 octeți va echivala cu citirea a patru simboluri: „lumea”.

Apoi, din nou, trecem la sfârșitul fișierului, fără a ajunge la sfârșitul a cinci caractere (adică din nou din poziția caracterului „w”) și scriem șirul „casa”. Astfel, șirul „casa” înlocuiește șirul „lume”.

Închiderea unui flux

În exemplele de mai sus, construcția de utilizare este utilizată pentru a închide fluxul. După ce toate instrucțiunile și expresiile din blocul using s-au finalizat, obiectul FileStream este distrus. Cu toate acestea, putem alege o altă cale:

FileStream fstream = null; încercați (fstream = new FileStream (@ "D: \ note3.dat", FileMode.OpenOrCreate); // operațiuni de flux) catch (Exception ex) () în final (dacă (fstream! = null) fstream.Close (); )

Dacă nu folosim construcția using, atunci trebuie să apelăm în mod explicit metoda Close (): fstream.Close ()

Majoritatea programelor de calculator funcționează cu fișiere și, prin urmare, devine necesară crearea, ștergerea, scrierea, citirea, deschiderea fișierelor. Ce este un fișier? Un fișier este un set numit de octeți care poate fi stocat pe un dispozitiv de stocare. Ei bine, acum este clar că un fișier este înțeles ca o anumită secvență de octeți, care are un nume propriu, unic, de exemplu un fișier .txt. Fișierele cu aceleași nume nu pot fi într-un singur director. Numele fișierului înseamnă nu numai numele, ci și extensia sa, de exemplu: fișier.txt și fișier.dat fișiere diferite, deși au același nume. Există un astfel de concept precum numele complet al fișierelor - aceasta este adresa completă a directorului de fișiere cu numele fișierului, de exemplu: D: \ docs \ file.txt. Este important să înțelegeți aceste concepte de bază, altfel va fi dificil să lucrați cu fișiere.

Pentru a lucra cu fișiere, trebuie să conectați fișierul antet . V sunt definite mai multe clase și sunt incluse fișiere de antet fisier de intrare si ieșire fișier.

File I / O este similar cu I / O standard, singura diferență este că I / O se face nu pe ecran, ci către un fișier. Dacă I/O la dispozitivele standard se efectuează folosind obiectele cin și cout, atunci pentru a organiza I/O fișier, este suficient să creați propriile obiecte care pot fi utilizate în mod similar cu operatorii cin și cout.

De exemplu, trebuie să creați un fișier text și să scrieți în el linia Lucru cu fișierele în C++. Pentru a face acest lucru, trebuie să faceți următorii pași:

  1. creați un obiect din clasa ofstream ;
  2. asociați obiectul de clasă cu fișierul în care urmează să fie scris;
  3. scrieți o linie într-un fișier;
  4. închideți fișierul.

De ce este necesar să se creeze un obiect al clasei ofstream și nu al clasei ifstream? Deoarece trebuie să scrieți într-un fișier și dacă aveți nevoie să citiți date dintr-un fișier, ar fi creat un obiect din clasa ifstream.

// creează un obiect de scris în fișierul de flux / * nume obiect * /; // un obiect al clasei ofstream

Să numim obiectul - fout. Iată ce obțineți:

Ofstream fout;

De ce avem nevoie de un obiect? Obiectul este necesar pentru a putea scrie în fișier. Obiectul a fost deja creat, dar nu este asociat cu fișierul în care doriți să scrieți șirul.

Fout.open ("cppstudio.txt"); // leagă obiectul la fișier

Prin operația punct, obținem acces la metoda clasei deschise (), în parantezele căreia indicăm numele fișierului. Fișierul specificat va fi creat în directorul curent cu programul. Dacă există un fișier cu acest nume, fișierul existent va fi suprascris cu cel nou. Deci, fișierul este deschis, rămâne să scrieți linia necesară în el. Acest lucru se face astfel:

Fout<< "Работа с файлами в С++"; // запись строки в файл

Folosind operațiunea stream împreună cu obiectul fout, File Worker în linia C++ este scrisă într-un fișier. Deoarece nu mai este necesară modificarea conținutului fișierului, acesta trebuie închis, adică obiectul trebuie separat de fișier.

Fout.close (); // închide fișierul

Rezultat - a fost creat un fișier cu linia Lucrul cu fișiere în C++.

Pașii 1 și 2 pot fi combinați, adică creați un obiect pe o linie și legați-l la un fișier. Acest lucru se face astfel:

Ofstream fout ("cppstudio.txt"); // creează un obiect al clasei ofstream și conectează-l la fișierul cppstudio.txt

Să combinăm tot codul și să obținem următorul program.

// file.cpp: definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include folosind namespace std; int main (int argc, char * argv) (ofstream fout ("cppstudio.txt"); // creează un obiect din clasa ofstream pentru înregistrare și leagă-l la fișierul cppstudio.txt fout<< "Работа с файлами в С++"; // запись строки в файл fout.close(); // закрываем файл system("pause"); return 0; }

Rămâne să verificăm corectitudinea programului și pentru aceasta deschidem fișierul cppstudio.txt și ne uităm la conținutul său, ar trebui să fie - Lucrul cu fișiere în C++.

  1. creați un obiect din clasa ifstream și asociați-l cu fișierul din care se va face citirea;
  2. citește dosarul;
  3. închideți fișierul.
// file_read.cpp: definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include #include folosind namespace std; int main (int argc, char * argv) (setlocale (LC_ALL, "rus"); // afișarea corectă a caracterului buff cu alfabet chirilic; // buffer pentru stocarea intermediară a textului citit din fișierul ifstream fin ("cppstudio.txt "); // a deschis fișierul pentru a citi fin >><< buff << endl; // напечатали это слово fin.getline(buff, 50); // считали строку из файла fin.close(); // закрываем файл cout << buff << endl; // напечатали эту строку system("pause"); return 0; }

Programul arată două moduri de citire dintr-un fișier, primul folosește operația de transfer în flux, al doilea folosește funcția getline () ... În primul caz, se citește doar primul cuvânt, iar în al doilea caz se citește un șir de 50 de caractere. Dar, din moment ce au rămas mai puțin de 50 de caractere în fișier, caracterele sunt citite, inclusiv, până la ultimul. Rețineți că citiți a doua oară (linia 17) a continuat, după primul cuvânt, și nu de la început, din moment ce primul cuvânt a fost citit înlinia 14... Rezultatul programului este prezentat în Figura 1.

Lucrul cu fișiere în C++ Apăsați orice tastă pentru a continua. ... ...

Figura 1 - Lucrul cu fișiere în C++

Programul a funcționat corect, dar nu este întotdeauna cazul, chiar dacă totul este în ordine cu codul. De exemplu, numele unui fișier inexistent a fost transmis programului sau a fost făcută o eroare în nume. Ce atunci? În acest caz, nu se va întâmpla absolut nimic. Fișierul nu va fi găsit, ceea ce înseamnă că nu este posibil să îl citiți. Prin urmare, compilatorul va ignora liniile în care fișierul este accesat. Ca rezultat, programul se va închide corect, dar nimic nu va fi afișat pe ecran. S-ar părea că aceasta este o reacție complet normală la o astfel de situație. Dar un utilizator obișnuit nu va înțelege care este problema și de ce linia din fișier nu a apărut pe ecran. Deci, pentru a clarifica totul, C++ oferă o astfel de funcție - is_open (), care returnează valori întregi: 1 - dacă fișierul a fost deschis cu succes, 0 - dacă fișierul nu a fost deschis. Să modificăm programul cu deschiderea fișierului, astfel încât dacă fișierul nu a fost deschis, să fie afișat un mesaj corespunzător.

// file_read.cpp: definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include #include folosind namespace std; int main (int argc, char * argv) (setlocale (LC_ALL, "rus"); // afișarea corectă a alfabetului chirilic char buff; // buffer pentru stocarea intermediară a textului citit din fișierul ifstream fin ("cppstudio.doc "); // ( INCLUS NUMELE FIȘIER INCORECT) dacă (! Fin.is_open ()) // dacă fișierul nu este deschis<< "Файл не может быть открыт!\n"; // сообщить об этом else { fin >> buff; // citește primul cuvânt din fișierul cout<< buff << endl; // напечатали это слово fin.getline(buff, 50); // считали строку из файла fin.close(); // закрываем файл cout << buff << endl; // напечатали эту строку } system("pause"); return 0; }

Rezultatul programului este prezentat în Figura 2.

Fișierul nu poate fi deschis! Apăsați orice tastă pentru a continua. ... ...

Figura 2 - Lucrul cu fișiere în C++

După cum puteți vedea din Figura 2, programul a raportat incapacitatea de a deschide fișierul. Prin urmare, dacă programul lucrează cu fișiere, este recomandat să utilizați această funcție, is_open (), chiar dacă sunteți sigur că fișierul există.

Moduri de deschidere a fișierelor

Modurile de deschidere a fișierelor stabilesc modul în care sunt utilizate fișierele. Pentru a seta modul în clasa ios_base, sunt furnizate constante care determină modul de deschidere a fișierelor (vezi Tabelul 1).

Modurile de deschidere a fișierelor pot fi setate direct la crearea unui obiect sau la apelarea funcției de deschidere (). .

Ofstream fout ("cppstudio.txt", ios_base :: app); // deschideți fișierul pentru a adăuga informații la sfârșitul fișierului fout.open ("cppstudio.txt", ios_base :: app); // deschideți fișierul pentru a adăuga informații la sfârșitul fișierului

Modurile de deschidere a fișierelor pot fi combinate folosind operația logică pe biți sau| , de exemplu: ios_base :: out | ios_base :: trunc - deschideți un fișier pentru scriere, după ce îl ștergeți.

Obiectele clasei ofstream, atunci când sunt legate cu fișiere, conțin implicit modurile de deschidere a fișierelor ios_base :: out | ios_base :: trunc . Adică, fișierul va fi creat dacă nu există. Dacă fișierul există, atunci conținutul acestuia va fi șters, iar fișierul în sine va fi gata de scris. Obiectele clasei ifstream care se leagă cu un fișier au modul implicit de deschidere a fișierului ios_base :: in - fișierul este deschis doar pentru citire. Modul de deschidere a fișierului este numit și steag, pentru lizibilitate în viitor vom folosi chiar acest termen. Nu toate steaguri sunt listate în Tabelul 1, dar acestea ar trebui să fie suficiente pentru început.

Rețineți că steagurile ate și aplicația sunt foarte asemănătoare ca descriere, ambele mută indicatorul la sfârșitul fișierului, dar stegulețul aplicației permite scrierea doar la sfârșitul fișierului, iar stegulețul ate mută pur și simplu steag-ul la sfârșit. a fișierului și nu limitează locațiile de scriere.

Să dezvoltăm un program care, folosind operația sizeof (), va calcula caracteristicile tipurilor de date de bază în C++ și le va scrie într-un fișier. Specificații:

  1. numărul de octeți alocați pentru tipul de date
  2. valoarea maximă pe care o poate stoca un anumit tip de date.

Scrierea într-un fișier trebuie făcută în următorul format:

/ * Tip de date octet valoare max bool = 1 255,00 char = 1 255,00 scurt int = 2 32767.00 unsigned short int = 2 65535.00 int = 4 2147483647.00 unsigned int = 4 4294967295.00 lung int = 4 2147483647.00 unsigned long int = 4 4294967295.00 float = 4 2147483647.00 float lung = 8 9223372036854775800,00 dublu = 8 9223372036854775800,00 * /

Un astfel de program a fost deja dezvoltat mai devreme în secțiune, dar acolo toate informațiile despre tipurile de date au fost transmise la dispozitivul de ieșire standard și trebuie să refacem programul, astfel încât informațiile să fie scrise într-un fișier. Pentru a face acest lucru, trebuie să deschideți fișierul în modul de înregistrare, cu trunchierea preliminară a informațiilor despre fișierul curent ( linia 14). Odată ce fișierul este creat și deschis cu succes (liniile 16 - 20), în loc de declarația cout, în linia 22 utilizați obiectul fout. astfel, în loc de ecran, informațiile despre tipul de date sunt scrise într-un fișier.

// write_file.cpp: definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include #include // lucrează cu fișierele #include // Manipulatoare I/O folosind namespace std; int main (int argc, char * argv) (setlocale (LC_ALL, "rus"); // legați obiectul la fișier și deschideți fișierul în modul de scriere, după ce ați eliminat toate datele din acesta ofstream fout ("data_types.txt ", ios_base :: out | ios_base :: trunc); if (! fout.is_open ()) // dacă fișierul nu a fost deschis (cout<< "Файл не может быть открыт или создан\n"; // напечатать соответствующее сообщение return 1; // выполнить выход из программы } fout << " data type " << "byte" << " " << " max value "<< endl // anteturi de coloană <<"bool = " << sizeof(bool) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных bool*/ << (pow(2,sizeof(bool) * 8.0) - 1) << endl << "char = " << sizeof(char) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных char*/ << (pow(2,sizeof(char) * 8.0) - 1) << endl << "short int = " << sizeof(short int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных short int*/ << (pow(2,sizeof(short int) * 8.0 - 1) - 1) << endl << "unsigned short int = " << sizeof(unsigned short int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных unsigned short int*/ << (pow(2,sizeof(unsigned short int) * 8.0) - 1) << endl << "int = " << sizeof(int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных int*/ << (pow(2,sizeof(int) * 8.0 - 1) - 1) << endl << "unsigned int = " << sizeof(unsigned int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных unsigned int*/ << (pow(2,sizeof(unsigned int) * 8.0) - 1) << endl << "long int = " << sizeof(long int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных long int*/ << (pow(2,sizeof(long int) * 8.0 - 1) - 1) << endl << "unsigned long int = " << sizeof(unsigned long int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных undigned long int*/ << (pow(2,sizeof(unsigned long int) * 8.0) - 1) << endl << "float = " << sizeof(float) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных float*/ << (pow(2,sizeof(float) * 8.0 - 1) - 1) << endl << "long float = " << sizeof(long float) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных long float*/ << (pow(2,sizeof(long float) * 8.0 - 1) - 1) << endl << "double = " << sizeof(double) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных double*/ << (pow(2,sizeof(double) * 8.0 - 1) - 1) << endl; fout.close(); // программа больше не использует файл, поэтому его нужно закрыть cout << "Данные успешно записаны в файл data_types.txt\n"; system("pause"); return 0; }

Este imposibil să nu observați că modificările în program sunt minime și toate datorită faptului că intrarea / ieșirea standard și intrarea / ieșirea fișierelor sunt utilizate exact în același mod. La finalul programului, la oralinia 45am închis în mod explicit fișierul, deși nu este obligatoriu, este considerat o bună practică de programare. Este demn de remarcat faptul că toate funcțiile și manipulatoarele utilizate pentru formatarea I/O standard sunt relevante și pentru I/O fișier. Prin urmare, nu au existat erori atunci când operatorul cout a fost înlocuit cu un obiect fout.

Top articole similare