formatting i o printf
Ovaj vodič raspravlja o upotrebi i primjerima funkcija poput printf, sprintf, scanf koje se koriste za oblikovanje ulaza / izlaza u C ++:
U našim prethodnim tutorijalima za C ++ vidjeli smo da možemo izvršiti ulazno-izlazne operacije na C ++ koristeći cin / cout.
Osim korištenja ovih konstrukcija, možemo se poslužiti i bibliotekom C. Koristeći C standardnu biblioteku ulaza i izlaza (cstdio, C ++ ekvivalent za zaglavlje stdio.h na jeziku C), izvodimo I / O operacije koristeći 'tokove' koji rade s fizičkim uređajima poput tipkovnica (standardni ulaz), pisača, terminala (standardni izlaz) ) ili bilo koje druge vrste datoteka koje podržava operativni sustav.
=> Ovdje pogledajte temeljne vodiče za obuku za C ++.
Potoci nisu ništa drugo doli apstraktni entitet koji se koristi za ujednačenu interakciju s fizičkim uređajima. Svi tokovi imaju slične karakteristike i neovisni su o fizičkim medijskim uređajima.
U sljedećim temama u ovom uputstvu detaljno ćemo naučiti nekoliko funkcija, tj. Printf, sprint i scanf.
Što ćete naučiti:
- C ++ ispisf
- C ++ sprintf
- C ++ skeniranje
- scanf / printf vs. cin / cout U C ++
- Često postavljana pitanja
- Zaključak
C ++ ispisf
Funkcija printf u C ++ koristi se za pisanje rezultata koji su formatirani u stdout.
Prototip funkcije:
int printf (format const char *,…);
Parametri:
format => Pokazivač na niz koji se završava nulom zapisan u tok datoteke. Sastoji se od znakova, zajedno s neobaveznim specifikatorom formata koji započinje s%. Specifikator formata zamjenjuje se odgovarajućim vrijednostima koje slijede niz formata.
… => Ostali dodatni argumenti koji određuju podatke za ispis redoslijedom u kojem je naveden format.
Povratna vrijednost:
širina prvo pretraživanje c ++ stablo
Uspjeh => printf vraća broj vraćenih znakova.
Neuspjeh => Negativna vrijednost
Opis:
Funkcija printf definirana je u zaglavlju. Funkcije printf zapisuju niz na koji pokazuje pokazivač “format” na standardni izlazni stdout. Niz formata može sadržavati specifikatore formata koji se zatim zamjenjuju varijablama prosljeđenim funkciji printf kao dodatni argumenti (nakon niza formata).
Specifikator formata koji se koristi u funkciji printf ()
Opći oblik specifikatora formata je
%(flags)(width)(.precision)(length)specifier
Slijedi opis svakog od dijelova specifikatora formata:
- znak%: Ovo je vodeći znak%
- Zastave: Mogu imati sljedeće vrijednosti:
- -: Lijevo opravdava rezultat unutar polja. Prema zadanim postavkama, opravdano desno.
- +: Znak rezultata pridružen početku vrijednosti uključujući pozitivne rezultate.
- Razmak: U nedostatku znaka, razmak je pridružen početku rezultata.
- #: Navedite alternativni oblik pretvorbe.
- 0: Koristi se za cijele brojeve i brojeve s pomičnom zarezom. Djelujte kao vodeće nule u nedostatku prostora.
- Širina: Određuje minimalnu širinu polja u obliku * ili cijele vrijednosti. Ovo nije obavezno.
- Preciznost: Navodi preciznost s '.' Nakon čega slijedi * ili cijela vrijednost ili ništa. Ovo je također neobavezno.
- Duljina: Izborni argument koji je odredio veličinu argumenta.
- Specifikator: Ovo je specifikator formata pretvorbe.
Razni specifikatori formata koji se koriste u C ++ su sljedeći:
Nemoj | Specifikator | Opis |
---|---|---|
7 | u | Pretvara nepotpisani cijeli broj u decimalni prikaz. |
1 | % | Ispisuje%. |
dva | c | Ispisuje jedan znak. |
3 | s | Ispisuje niz. |
4 | d / i | Pretvara potpisani cijeli broj u decimalni prikaz. |
5 | ili | Pretvara nepotpisani cijeli broj u osminski prikaz. |
6 | x / X | Pretvara nepotpisani cijeli broj u heksadecimalni prikaz. |
8 | f / Ž | Pretvara broj s pomičnom zarezom u decimalni prikaz. |
9 | i / E | Pretvara broj s pomičnom zarezom u zapis decimalnog eksponenta. |
10 | a / A | Pretvara broj s pomičnom zarezom u heksadecimalni eksponent. |
jedanaest | g / G | Pretvara broj s pomičnom zarezom u decimalni ili decimalni zapis eksponenta. |
12 | n | Broj znakova do sada napisanih ovim pozivom funkcije. |
13 | str | Pokazivač koji upućuje na slijed znakova definiran implementacijom. |
Dolje je dat cjelovit primjer programiranja na C ++ koji pokazuje prethodno raspravljenu funkciju printf.
Primjer C ++ printf
#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; }
Izlaz:
Gornji program koristi razne pozive funkcije printf i napominjemo da svaki poziv printfu koristi razne specifikatore formata o kojima smo gore govorili. Specifikator formata% .3f označava plutajuću vrijednost s do 3 decimalna mjesta. Ostatak printf poziva prikazuje znakovne, decimalne, oktalne i heksadecimalne vrijednosti.
C ++ sprintf
Sprintf funkcija u C ++-u slična funkciji printf, osim s jednom razlikom. Umjesto da ispisuje izlaz u standardni izlazni stdout, sprintf zapisuje izlaz u međuspremnik znakovnih nizova.
Prototip funkcije:
int sprintf (char * međuspremnik, const char * format, ...)
Parametri:
međuspremnik => Pokazivač na međuspremnik niza u koji se zapisuje rezultat.
Format => Pokazivač na niz koji se završava nulom i zapisuje se u tok datoteke.
Napomena: Niz formata koji se koristi u funkciji sprintf jednak je onom koji je razmatran kao dio opisa funkcije printf.
… => Ostali dodatni argumenti koji određuju podatke za ispis redoslijedom u kojem je naveden format.
Povratna vrijednost:
uspjeh => Vraća broj znakova zapisanih u dovoljno veliki međuspremnik isključujući završni null znak.
Neuspjeh => Vrati se negativna vrijednost.
Opis:
Sprintf funkcija definirana je u zaglavlju. Funkcija sprintf koristi se za pisanje niza usmjerenog formatom u međuspremnik niza. Format niza može sadržavati specifikatore formata koji počinju s% koji se zamjenjuju vrijednostima varijabli koje se prosljeđuju funkciji sprintf () kao dodatni argumenti.
Pogledajmo primjer programa C ++ koji prikazuje upotrebu sprintf funkcije.
Primjer sprintf
#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; }
Izlaz:
U gornjem primjeru prvo zapisujemo formatirani niz u međuspremnik znakova mybuf pomoću funkcije sprintf. Zatim prikazujemo niz u stdout pomoću cout-a. Konačno, prikazujemo broj znakova zapisanih u međuspremnik mybuf.
C ++ skeniranje
Funkcija scanf u C ++ čita ulazne podatke sa standardnog ulaznog stdina.
Prototip funkcije:
int scanf (format const char *, ...)
Parametri:
format => Pokazivač na niz koji se završava nulom i definira način čitanja unosa. Ovaj niz formata sastoji se od specifikatora formata.
… => Dodatni argumenti koji primaju unos podataka. Ti su dodatni argumenti u slijedu prema specifikatoru formata.
Povratna vrijednost:
uspjeh => Vraća čitani broj znakova.
matchingFailure => Vraća nulu ako se dogodi neuspjeh podudaranja prije nego što je dodijeljen prvi argument koji prima.
neuspjeh unosa => Vraća EOF ako se dogodi neuspjeh unosa prije nego što je dodijeljen prvi argument koji prima.
Opis:
Funkcija Scanf () definirana je u zaglavlju. Ova funkcija čita podatke iz stdina i pohranjuje u navedene varijable.
Specifikator formata koji se koristi u funkciji scanf ()
Općeniti format niza formata funkcije scanf () je:
%(*)(width)(length)specifier
Stoga specifikator formata ima sljedeće dijelove:
- Znak koji nije razmak: To su znakovi, osim% koji troše jedan identičan znak iz ulaznog toka.
- Znak razmaka: Svi uzastopni razmaci smatraju se jednim razmakom. Isto vrijedi i za sekvence bijega.
- Specifikacija pretvorbe: Ima sljedeći format:
- %: Znak koji specificira početak.
- *: Zvani zadatak koji suzbija znak. Ako je prisutan, scanf ne dodjeljuje rezultat niti jednom parametru primanja. Ovaj parametar nije obavezan.
- Širina polja: Izborni parametar (pozitivni cijeli broj) koji određuje maksimalnu širinu polja.
- Duljina: Određuje veličinu primanja argumenta.
Specifikator formata pretvorbe može biti sljedeći:
Nemoj | Specifikator formata | Opis |
---|---|---|
7 | x / X | Podudara se s nepotpisanim heksadecimalnim cijelim brojem. |
1 | % | Podudara se doslovno%. |
dva | c | Podudara se s jednim ili više znakova do širine. |
3 | s | Podudara se sa slikom koji nije razmak do specificirane širine ili prvog razmaka. |
4 | d | Podudara se s decimalom. |
5 | ja | Podudara se s cijelim brojem. |
6 | ili | Podudara se s nepotpisanim osminski cijelim brojem. |
8 | u | Odgovara nepotpisanom decimalnom cijelom broju. |
9 | a / A, e / E, f / F, g / G | Podudara se s brojem s pomičnom zarezom. |
10 | (postavljeno) | Podudara se s praznim nizom znakova iz zadanog skupa. Ako mu prethodi ^, podudaraju se znakovi koji nisu u skupu. |
12 | n | Vraća broj do sada pročitanih znakova. |
13 | str | Pokazivač na slijed znakova specifičan za implementaciju. |
Dalje, implementirat ćemo uzorak programa za demonstraciju upotrebe funkcije scanf u C ++
Primjer scanf
#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; }
Izlaz:
U gornjem programu pročitali smo dvije ulazne nizove i heksadecimalni broj. Zatim kombiniramo dva niza i prikazujemo rezultantni niz. Broj se pretvara u decimalni broj i prikazuje.
scanf / printf vs. cin / cout U C ++
scanf / printf | cin / trošak |
---|---|
Standardni ulaz-izlaz na C jeziku. | Standardni ulaz-izlaz na jeziku C ++. |
Definirano u 'stdio.h'. | Definirano u 'iostream'. |
scanf i printf su funkcija koja se koristi za I / O. | cin i cout su stream objekti. |
Niz formatiranja koristi se za formatiranje ulaza i izlaza. | Operateri >> i<< are overloaded and used along with cin and cout respectively. Ne koristi se niz formata. |
Vrstu podataka određujemo pomoću držača mjesta. | Nije potrebno navesti vrstu podataka. |
Često postavljana pitanja
P # 1) Možete li koristiti printf u C ++?
Odgovor: Da. Printf se može koristiti u jeziku C ++. Da bismo koristili ovu funkciju u programu C ++, u program moramo uključiti zaglavlje.
P # 2) Koji jezik koristi printf?
Odgovor: Printf je standardna funkcija izlaza na jeziku C. Također se može koristiti na jeziku C ++ uključivanjem zaglavlja u program C ++.
P # 3) Što je% d u programiranju na C-u?
Odgovor: % d vrijednost u funkciji printf odnosi se na cijelu vrijednost.
P # 4) Zašto se & koristi u Scanf-u?
Odgovor: & operator koristi se za pristup memorijskom mjestu. Stenografija je dodavanje pokazivača na varijablu, umjesto da ga eksplicitno prosljeđujete.
P # 5) Koja je razlika između printf () i sprintf ()?
Odgovor: Obje funkcije printf () i sprintf () su iste, osim jedne razlike. Dok printf () zapisuje izlaz u stdout (standardni izlaz), sprintf zapisuje izlaz u međuspremnik znakovnih nizova.
P # 6) Prekida li Sprintf null?
Odgovor: sprintf vraća broj znakova pohranjenih u nizu znakovnih nizova, isključujući null završetak.
P # 7) Zašto sprintf nije siguran?
Odgovor: Sprintf funkcija ne provjerava duljinu odredišnog međuspremnika. Stoga, kada je duljina niza formata predugačka, funkcija može uzrokovati preljev odredišnog međuspremnika. To može dovesti do nestabilnosti aplikacije i sigurnosnih problema, čime sprintf funkcija postaje nesigurnom.
Zaključak
U ovom uputstvu naučili smo ulazno-izlazne funkcije biblioteke C - printf, sprintf i scanf koje se mogu koristiti u C ++-u uključivanjem zaglavlja koje je ekvivalentno zaglavlju C-a.
Kao što je već rečeno, ulazno-izlazne funkcije koriste specifikatore formata i držače mjesta te moramo odrediti vrste podataka varijabli u kojima se podaci čitaju ili zapisuju.
Suprotno tome, objekti za strujanje koji se koriste u C ++ - cin i cout ne koriste nikakve specifikatore formata ili rezervirana mjesta. Koriste preopterećeni >> i<< operators to read in and write the data.
=> Ovdje pogledajte Savršeni vodič za obuku za C ++.