formatting i o printf
Acest tutorial discută despre utilizarea și exemplele de funcții precum printf, sprintf, scanf care sunt utilizate pentru formarea intrărilor / ieșirilor în C ++:
În tutorialele noastre anterioare despre C ++, am văzut că putem efectua operații de intrare-ieșire în C ++ folosind cin / cout.
În afară de utilizarea acestor construcții, putem folosi și biblioteca C. Folosind Biblioteca de intrare și ieșire standard C (cstdio, echivalent C ++ pentru antetul stdio.h în limbaj C), efectuăm operații de I / O folosind „fluxuri” care funcționează cu dispozitive fizice precum tastaturi (intrare standard), imprimante, terminale (ieșire standard) ) sau orice alt tip de fișier acceptat de sistemul de operare.
=> Consultați aici tutorialele de instruire în profunzime C ++.
Fluxurile nu sunt altceva decât o entitate abstractă care este utilizată pentru a interacționa cu dispozitivele fizice într-o manieră uniformă. Toate fluxurile au caracteristici similare și sunt independente de dispozitivele media fizice.
În următoarele subiecte din acest tutorial, vom afla în detaliu despre câteva funcții, adică printf, sprint și scanf.
Ce veți învăța:
- C ++ printf
- C ++ sprintf
- Scanare C ++
- scanf / printf Vs. cin / cout În C ++
- întrebări frecvente
- Concluzie
C ++ printf
Funcția printf în C ++ este utilizată pentru a scrie ieșirea care este formatată în stdout.
Prototipul funcției:
int printf (format const char *, ...);
Parametri:
format => Un indicator către șirul terminat nul scris în fluxul de fișiere. Se compune din caractere împreună cu un specificator de format opțional care începe cu%. Specificatorul de format este înlocuit cu valori corespunzătoare care urmează șirului de format.
... => Alte argumente suplimentare care specifică datele care trebuie tipărite în ordinea în care este specificat formatul.
Valoare returnată:
servicii web întrebări și răspunsuri de interviu pentru experți
Succes => printf returnează numărul de caractere returnate.
Eșec => Valoare negativă
Descriere:
Funcția printf este definită în antet. Funcțiile printf scriu șirul indicat de indicatorul „format” în standardul de ieșire standard. Șirul de format poate conține specificatori de format care sunt apoi înlocuiți cu variabilele transmise funcției printf ca argumente suplimentare (după șirul de format).
Specificator de format utilizat în funcția printf ()
O formă generală de specificator de format este
%(flags)(width)(.precision)(length)specifier
Mai jos este prezentată o descriere a fiecărei părți a specificatorului de format:
- % semn: Acesta este un semn principal%
- Steaguri: Pot avea următoarele valori:
- -: Stânga justifică rezultatul în câmp. În mod implicit, dreptul justificat.
- +: Semnul rezultatului atașat la începutul valorii, inclusiv rezultate pozitive.
- Spațiu: în absența unui semn, spațiul este atașat la începutul rezultatului.
- #: Specificați o formă alternativă de conversie.
- 0: Folosit pentru numere întregi și cu virgulă mobilă. Acționează ca zerouri principale în absența spațiului.
- Lăţime: Specifică lățimea minimă a câmpului sub forma unui * sau a unei valori întregi. Acest lucru este opțional.
- Precizie: Specifică precizia cu un „.” Urmat de un * sau un număr întreg sau nimic. Acest lucru este, de asemenea, opțional.
- Lungime: Argumentul opțional care a specificat dimensiunea argumentului.
- Specificator: Acesta este un specificator de format de conversie.
Diverse specificații de format utilizate în C ++ sunt după cum urmează:
Nu face | Specificator | Descriere |
---|---|---|
7 | tu | Convertește întregul nesemnat în reprezentare zecimală. |
1 | % | Tipărește un%. |
Două | c | Tipărește un singur caracter. |
3 | s | Tipărește un șir. |
4 | d / i | Convertește numărul întreg semnat în reprezentare zecimală. |
5 | sau | Convertește întregul nesemnat în reprezentare octală. |
6 | x / X | Convertește întregul nesemnat în reprezentare hexazecimală. |
8 | f / F | Convertește numărul în virgulă mobilă în reprezentare zecimală. |
9 | și / E | Convertește numărul în virgulă mobilă în notația exponentului zecimal. |
10 | a / A | Convertește numărul în virgulă mobilă într-un exponent hexazecimal. |
unsprezece | g / G | Convertește numărul în virgulă mobilă în notație zecimală sau exponentă zecimală. |
12 | n | Numărul de caractere scrise până acum de acest apel funcțional. |
13 | p | Un indicator care indică secvența de caractere definită de implementare. |
Dat mai jos este un exemplu complet de programare C ++ care demonstrează funcția printf discutată mai sus.
C ++ printf Exemplu
#include //C++ printf example int main() { char ch = 'A'; float a = 8.0, b = 3.0; double d = 3.142; int x = 20; printf('float division : %.3f / %.3f = %.3f
', a,b,a/b); printf('Double value: %.4f
', d); printf('Setting width %*c
',4,ch); printf('Octal equivalent of %d is %o
',x,x); printf('Hex equivalent of %d is %x
',x,x); return 0; }
Ieșire:
Programul de mai sus folosește diverse apeluri către funcția printf și observăm că fiecare apel către printf folosește diferiți specificatori de format despre care am discutat mai sus. Specificatorul de format% .3f denotă o valoare float cu până la 3 zecimale. Restul apelurilor printf afișează caracterele, zecimalele, octalele și valorile hex.
C ++ sprintf
Funcția Sprintf în C ++ similară funcției printf, cu excepția unei diferențe. În loc să scrie ieșirea în ieșirea standard, sprintf scrie ieșirea într-un buffer de șir de caractere.
Prototipul funcției:
int sprintf (char * buffer, const char * format, ...)
Parametri:
tampon => Pointer către un buffer șir pe care urmează să fie scris rezultatul.
Format => Pointer către un șir terminat nul care este scris în fluxul de fișiere.
Notă: Șirul de format utilizat în funcția sprintf este același cu cel discutat ca parte a descrierii funcției printf.
... => Alte argumente suplimentare care specifică datele care trebuie tipărite în ordinea în care este specificat formatul.
Valoare returnată:
succes => Returnează numărul de caractere scrise în memoria tampon suficient de mare, cu excepția caracterului nul care se termină.
Eșec => Se returnează valoarea negativă.
Descriere:
Funcția Sprintf este definită în antet. Funcția sprintf este utilizată pentru a scrie un șir îndreptat de format în bufferul șirului. Formatul șirului poate conține specificatori de format începând cu%, care sunt înlocuiți cu valorile variabilelor care sunt transmise funcției sprintf () ca argumente suplimentare.
Să vedem un exemplu de program C ++ care arată utilizarea funcției sprintf.
sprintf Exemplu
#include #include using namespace std; int main() { char mybuf(100); int retVal; char name() = 'Software Testing Help'; char topic() = 'C++ tutorials'; retVal = sprintf(mybuf, 'Hi, this is %s and you are reading %s !!', name, topic); cout << mybuf << endl; cout << 'Number of characters written = ' << retVal << endl; return 0; }
Ieșire:
În exemplul de mai sus, mai întâi, scriem un șir formatat într-un buffer de caractere mybuf folosind funcția sprintf. Apoi afișăm șirul către stdout folosind cout. În cele din urmă, afișăm numărul de caractere scrise în memoria tampon mybuf.
Scanare C ++
Funcția scanf din C ++ citește datele de intrare de la standardul de intrare standard.
Prototipul funcției:
int scanf (format const char *, ...)
Parametri:
format => Pointer către un șir terminat nul care definește modul de citire a intrării. Acest șir de format este format din specificatori de format.
... => Argumente suplimentare care primesc introducerea datelor. Aceste argumente suplimentare sunt în ordine conform specificatorului de format.
Valoare returnată:
succes => Returnează un număr de caractere citite în.
matchingFailure => Returnează zero dacă eșecul de potrivire apare înainte ca primul argument primitor să fie atribuit.
intrare Eșec => Returnează EOF dacă apare o eroare de intrare înainte ca primul argument de primire să fie atribuit.
Descriere:
Funcția Scanf () este definită în antet. Această funcție citește datele de la stdin și stochează în variabilele furnizate.
Specificator de format folosit în funcția scanf ()
Formatul general pentru șirul de format al funcției scanf () este:
%(*)(width)(length)specifier
Astfel, specificatorul de format are următoarele părți:
- Caracter non-spațiu alb: Acestea sunt caracterele cu excepția% care consumă un caracter identic din fluxul de intrare.
- Caracterul spațiului alb: Toate caracterele consecutive ale spațiului alb sunt considerate ca fiind un singur caracter spațial. Același lucru este valabil și pentru secvențele de evadare.
- Specificații de conversie: Are următorul format:
- %: Caracter care specifică începutul.
- *: Caracter numit de suprimare a atribuirii. Dacă este prezent, scanf nu atribuie rezultatul niciunui parametru de recepție. Acest parametru este opțional.
- Lățimea câmpului: Parametru opțional (un număr întreg pozitiv) care specifică o lățime maximă a câmpului.
- Lungime: Specifică dimensiunea primirii unui argument.
Specificatorul formatului de conversie poate fi după cum urmează:
Nu face | Specificator de format | Descriere |
---|---|---|
7 | x / X | Se potrivește cu numărul întreg hexazecimal nesemnat. |
1 | % | Se potrivește cu% literal. |
Două | c | Potrivește un singur caracter sau mai multe caractere până la lățime. |
3 | s | Potrivește secvența caracterului care nu este spațiul alb până la lățimea specificată sau primul spațiu alb. |
4 | d | Se potrivește zecimal. |
5 | eu | Se potrivește număr întreg. |
6 | sau | Se potrivește întregului octal nesemnat. |
8 | tu | Se potrivește cu numărul întreg zecimal nesemnat. |
9 | a / A, e / E, f / F, g / G | Se potrivește cu numărul în virgulă mobilă. |
10 | (a stabilit) | Se potrivește cu secvența de caractere care nu este goală din setul dat. Dacă este precedat de ^, atunci caracterele care nu sunt în set sunt potrivite. |
12 | n | Returnează numărul de caractere citite până acum. |
13 | p | Pointer către implementarea secvenței de caractere specifice. |
Apoi, vom implementa un exemplu de program pentru a demonstra utilizarea funcției scanf în C ++
scanf Exemplu
#include int main () { char str (80), pos_str(80); int i; printf ('Enter your company name: '); scanf ('%79s',str); printf ('Enter your position: '); scanf ('%s',pos_str); printf ('You work at %s as %s.
',str,pos_str); printf ('Enter a hexadecimal number: '); scanf ('%x',&i); printf ('You have entered %#x (%d).
',i,i); return 0; }
Ieșire:
În programul de mai sus, citim două șiruri de intrare și un număr hexazecimal. Apoi combinăm cele două șiruri și afișăm șirul rezultat. Numărul este convertit în zecimal și afișat.
scanf / printf Vs. cin / cout În C ++
scanf / printf | cin / cost |
---|---|
Intrare-ieșire standard în limbă C. | Intrare-ieșire standard în limbaj C ++. |
Definit în „stdio.h”. | Definit în „iostream”. |
scanf și printf sunt o funcție utilizată pentru I / O. | cin și cout sunt obiecte flux. |
Șirul de format este utilizat pentru formatarea intrării și ieșirii. | Operatori >> și<< are overloaded and used along with cin and cout respectively. Nu este utilizat niciun șir de format. |
Specificăm tipul de date folosind suportul locului. | Nu este nevoie să specificați tipul de date. |
întrebări frecvente
Q # 1) Puteți utiliza printf în C ++?
Răspuns: Da. Printf poate fi utilizat în C ++. Pentru a utiliza această funcție într-un program C ++, trebuie să includem antetul în program.
Q # 2) Ce limbă folosește printf?
Răspuns: Printf este funcția de ieșire standard în limbajul C. Poate fi folosit și în limbajul C ++ prin includerea antetului în programul C ++.
Q # 3) Ce este% d în programarea C?
Răspuns: Valoarea% d în funcția printf se referă la o valoare întreagă.
Î # 4) De ce și este utilizat în Scanf?
Răspuns: & operatorul este utilizat pentru a accesa locația memoriei. Este prescurtat să treci un pointer către variabilă în loc să-l treci explicit.
Q # 5) Care este diferența dintre printf () și sprintf ()?
Răspuns: Ambele funcții printf () și sprintf () sunt aceleași, cu excepția unei diferențe. În timp ce printf () scrie ieșirea în stdout (ieșire standard), sprintf scrie ieșirea într-un buffer de șir de caractere.
Q # 6) Se termină Sprintf nul?
Răspuns: sprintf returnează numărul de caractere stocate în matricea de șiruri de caractere, cu excepția caracterului de terminare nul.
Q # 7) De ce sprintf este nesigur?
Răspuns: Funcția Sprintf nu verifică lungimea bufferului de destinație. Prin urmare, atunci când lungimea șirului de format este prea mare, funcția ar putea provoca depășirea bufferului de destinație. Acest lucru poate duce la instabilitatea aplicației și la probleme de securitate, ceea ce face ca funcția sprintf să fie nesigură.
Concluzie
În acest tutorial, am învățat funcțiile de intrare-ieșire ale bibliotecii C - printf, sprintf și scanf care pot fi utilizate în C ++ prin includerea antetului care este echivalentul pentru antetul C.
După cum sa discutat deja, funcțiile de intrare-ieșire folosesc specificatori de format și suporturi de locuri și trebuie să specificăm tipurile de date ale variabilelor în care datele sunt citite sau scrise.
Spre deosebire de aceasta, obiectele de streaming utilizate în C ++ - cin și cout nu folosesc niciun specificator de format sau substituenți. Folosesc supraîncărcat >> și<< operators to read in and write the data.
=> Consultați aici ghidul perfect de formare C ++.