formatting i o printf
Denne opplæringen diskuterer bruken og eksempler på funksjoner som printf, sprintf, scanf som brukes til å formere Input / Output i C ++:
I våre tidligere C ++ -opplæringer har vi sett at vi kan utføre Input-Output-operasjoner i C ++ ved hjelp av cin / cout.
Bortsett fra å bruke disse konstruksjonene, kan vi også bruke C-biblioteket. Ved å bruke C Standard Input and Output Library (cstdio, C ++ ekvivalent for stdio.h header på C-språk), utfører vi I / O-operasjoner ved hjelp av 'streams' som fungerer med fysiske enheter som tastaturer (standardinngang), skrivere, terminaler (standardutgang) ) eller andre filtyper som støttes av operativsystemet.
=> Sjekk In-Depth C ++ Training Tutorials Here.
Strømmer er ikke annet enn en abstrakt enhet som brukes til å samhandle med fysiske enheter på en enhetlig måte. Alle strømmer har lignende egenskaper og er uavhengige av de fysiske medieenhetene.
I våre neste emner i denne opplæringen vil vi lære i detalj om noen få funksjoner, dvs. printf, sprint og scanf.
Hva du vil lære:
- C ++ printf
- C ++ sprintf
- C ++ scanf
- scanf / printf Vs. cin / cout I C ++
- ofte stilte spørsmål
- Konklusjon
C ++ printf
Printf-funksjonen i C ++ brukes til å skrive utdataene som er formatert til stdout.
Funksjonsprototype:
int printf (const char * format,…);
Parametere:
format => En peker til null-avsluttet streng skrevet til filstrømmen. Den består av tegn sammen med en valgfri formatspesifikator som begynner med%. Formatspesifikatoren erstattes av passende verdier som følger formatstrengen.
... => Andre tilleggsargumenter som spesifiserer dataene som skal skrives ut i den rekkefølgen formatet er spesifisert.
Returverdi:
nettsted som lar deg laste ned youtube-videoer
Suksess => printf returnerer antall tegn som returneres.
Feil => Negativ verdi
Beskrivelse:
Printf-funksjonen er definert i topptekst. Printf-funksjonene skriver strengen som 'format' -pekeren peker til standard utgangsstdout. Formatstrengen kan inneholde formatspesifikatorer som deretter erstattes av variablene som sendes til printf-funksjonen som tilleggsargumenter (etter formatstreng).
Format Specifier Used In printf () Funksjon
En generell form for formatspesifikator er
%(flags)(width)(.precision)(length)specifier
Nedenfor er en beskrivelse av hver av delene i formatet:
- % tegn: Dette er et ledende% tegn
- Flagg: De kan ha følgende verdier:
- -: Venstre begrunner resultatet innenfor feltet. Høyre begrunnes som standard.
- +: Tegn på resultatet knyttet til begynnelsen av verdien inkludert positive resultater.
- Rom: I mangel av et tegn, er det plassert plass til begynnelsen av resultatet.
- #: Angi en alternativ form for konvertering.
- 0: Brukes for heltall og flytende tall. Fungere som ledende nuller i fravær av plass.
- Bredde: Spesifiserer minimum feltbredde i form av en * eller en heltallverdi. Dette er valgfritt.
- Presisjon: Spesifiserer presisjon med et '.' Etterfulgt av et * eller et heltall eller ingenting. Dette er også valgfritt.
- Lengde: Det valgfrie argumentet som spesifiserte størrelsen på argumentet.
- Spesifikator: Dette er en spesifiseringsformat for konverteringsformat.
Ulike formatspesifikatorer som brukes i C ++ er som følger:
Ikke | Spesifikator | Beskrivelse |
---|---|---|
7 | u | Konverterer usignert heltall til desimalrepresentasjon. |
1 | % | Skriver ut%. |
to | c | Skriver ut enkelttegn. |
3 | s | Skriver ut en streng. |
4 | d / i | Konverterer signert heltall til desimalrepresentasjon. |
5 | eller | Konverterer usignert heltall til oktal representasjon. |
6 | x / X | Konverterer usignert heltall til heksadesimal representasjon. |
8 | f / F | Konverterer flytende tall til desimalrepresentasjon. |
9 | og / E | Konverterer flytende nummer til desimal eksponentnotasjon. |
10 | a / A | Konverterer flytende nummer til en heksadesimal eksponent. |
elleve | g / G | Konverterer flytende nummer til desimal- eller desimaleksponentnotasjon. |
12 | n | Antall tegn som hittil er skrevet av denne funksjonen. |
1. 3 | s | En peker som peker på implementeringsdefinert tegnsekvens. |
Nedenfor er et komplett C ++ programmeringseksempel som demonstrerer printf-funksjonen som er diskutert ovenfor.
C ++ printf Eksempel
#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; }
Produksjon:
Ovennevnte program bruker forskjellige anrop til printf-funksjonen, og vi bemerker at hver samtale til printf bruker forskjellige formatspesifikatorer vi diskuterte ovenfor. Formatspesifikatoren% .3f betegner en flytverdi med opptil 3 desimaler. Resten av printf-samtalene viser tegn-, desimal-, oktal- og hexverdiene.
C ++ sprintf
Sprintf-funksjon i C ++ ligner på printf-funksjonen, bortsett fra med en forskjell. I stedet for å skrive utdataene til standard utgangsstdout, skriver sprintf utgangen til en tegnstrengebuffer.
Funksjonsprototype:
int sprintf (char * buffer, const char * format, ...)
Parametere:
buffer => Peker til en strengbuffer som resultatet skal skrives til.
Format => Peker til en null-avsluttet streng som er skrevet til filstrømmen.
Merk: Formatstrengen som brukes i sprintf-funksjonen er den samme som den som er diskutert som en del av beskrivelsen av printf-funksjonen.
... => Andre tilleggsargumenter som spesifiserer dataene som skal skrives ut i den rekkefølgen formatet er spesifisert.
Returverdi:
suksess => Returnerer antall tegn skrevet til tilstrekkelig stor buffer unntatt nulltegnet som avsluttes.
Feil => Negativ verdi returneres.
Beskrivelse:
Sprintf-funksjonen er definert i overskriften. Sprintf-funksjonen brukes til å skrive en streng som formatet peker til strengbufferen. Strengformatet kan inneholde formatspesifikatorer som begynner med% som erstattes av verdiene til variabler som sendes til sprintf () -funksjonen som tilleggsargumenter.
La oss se et eksempel på C ++ - program som viser bruken av sprintf-funksjonen.
sprintf Eksempel
#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; }
Produksjon:
I eksemplet ovenfor skriver vi først en formatert streng til en tegnbuffer mybuf ved hjelp av sprintf-funksjonen. Deretter viser vi strengen til stdout ved hjelp av cout. Til slutt viser vi antall tegn skrevet til mybuf-bufferen.
C ++ scanf
Scanf-funksjonen i C ++ leser inngangsdata fra standard inngang stdin.
Funksjonsprototype:
int scanf (const char * format,…)
Parametere:
format => Peker til en null-avsluttet streng som definerer hvordan du skal lese inngangen. Denne formatstrengen består av formatspesifikatorer.
... => Ytterligere argumenter som mottar datainndata. Disse tilleggsargumentene er i rekkefølge i henhold til formatspesifikatoren.
Returverdi:
suksess => Returnerer et antall tegn som er lest inn.
matchingFailure => Returnerer null hvis samsvarende feil oppstår før det første mottaksargumentet er tildelt.
inngangsfeil => Returnerer EOF hvis en inngangsfeil oppstår før det første mottaksargumentet er tildelt.
Beskrivelse:
Scanf () -funksjonen er definert i overskriften. Denne funksjonen leser dataene fra stdin og lagrer i de oppgitte variablene.
Format Specifier Used In scanf () Function
Det generelle formatet for scanf () funksjonsformatstrengen er:
%(*)(width)(length)specifier
Dermed har formatspesifikatoren følgende deler:
- Ikke-mellomromstegn: Dette er tegnene unntatt% som bruker ett identisk tegn fra inngangsstrømmen.
- Mellomromstegn: Alle påfølgende tegn i mellomrom betraktes som ett tegn i mellomrom. Det samme gjelder også escape-sekvenser.
- Konverteringsspesifikasjon: Den har følgende format:
- %: Tegn som spesifiserer begynnelsen.
- *: Kalt oppdrag undertrykkende karakter. Hvis det er tilstede, tildeler scanf ikke resultatet til noen mottaksparametere. Denne parameteren er valgfri.
- Feltbredde: Valgfri parameter (et positivt heltall) som spesifiserer en maksimal feltbredde.
- Lengde: Spesifiserer størrelsen på å motta et argument.
Konverteringsformatspesifikator kan være som følger:
Ikke | Formatspesifikator | Beskrivelse |
---|---|---|
7 | x / X | Matcher usignert heksadesimalt heltall. |
1 | % | Matcher bokstavelig%. |
to | c | Matcher enkelttegn eller flere tegn opp til bredde. |
3 | s | Matcher sekvensen med tegn som ikke er mellomrom til spesifisert bredde eller første mellomrom. |
4 | d | Matcher desimal. |
5 | Jeg | Matcher heltall. |
6 | eller | Matcher usignert oktalt heltall. |
8 | u | Matcher usignert desimaltall. |
9 | a / A, e / E, f / F, g / G | Matcher flytende nummer. |
10 | (sett) | Matcher ikke-.følge rekkefølge av tegn fra det gitte settet. Hvis du går foran ^, samsvares tegnene som ikke er i settet. |
12 | n | Returnerer antall tegn som er lest hittil. |
1. 3 | s | Peker til implementeringsspesifikk tegnsekvens. |
Deretter vil vi implementere et eksempelprogram for å demonstrere bruken av scanf-funksjon i C ++
scanf Eksempel
#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; }
Produksjon:
I programmet ovenfor leser vi to inngangsstrenger og et heksadesimalt tall. Deretter kombinerer vi de to strengene og viser den resulterende strengen. Tallet konverteres til desimal og vises.
scanf / printf Vs. cin / cout I C ++
scanf / printf | cin / kostnad |
---|---|
Standard input-output på C-språk. | Standard input-output på C ++ språk. |
Definert i 'stdio.h'. | Definert i 'iostream'. |
scanf og printf er en funksjon som brukes til I / O. | cin og cout er strømobjekter. |
Formatstrengen brukes til å formatere inngang og utgang. | Operatører >> og<< are overloaded and used along with cin and cout respectively. Ingen formatstrenger brukes. |
Vi spesifiserer type data ved hjelp av plassholder. | Ingen grunn til å spesifisere datatypen. |
ofte stilte spørsmål
Q # 1) Kan du bruke printf i C ++?
Svar: Ja. Printf kan brukes i C ++. For å bruke denne funksjonen i et C ++ - program, må vi inkludere toppteksten i programmet.
Q # 2) Hvilket språk bruker printf?
Svar: Printf er standard utgangsfunksjon i C-språk. Den kan også brukes på C ++ språk ved å inkludere toppteksten i C ++ - programmet.
Q # 3) Hva er% d i C-programmering?
Svar: % d-verdi i printf-funksjon refererer til et heltall.
Q # 4) Hvorfor og brukes i Scanf?
Svar: & operatør brukes til å få tilgang til minneplasseringen. Det er stenografi å sende en peker til variabelen i stedet for å sende den eksplisitt.
Q # 5) Hva er forskjellen mellom printf () og sprintf ()?
Svar: Begge funksjonene printf () og sprintf () er like bortsett fra en forskjell. Mens printf () skriver utdata til stdout (standardutgang), skriver sprintf utdata til en tegnstrengebuffer.
Q # 6) Avslutter Sprintf null?
Svar: sprintf returnerer antall tegn som er lagret i tegnstrengmatrisen unntatt nulltermineringstegnet.
Q # 7) Hvorfor er sprintf usikkert?
Svar: Sprintf-funksjonen sjekker ikke lengden på destinasjonsbufferen. Derfor når lengden på formatstrengen er for lang, kan funksjonen forårsake overløp av destinasjonsbufferen. Dette kan føre til applikasjonsinstabilitet og sikkerhetsproblemer og dermed gjøre sprintf-funksjonen usikker.
Konklusjon
I denne opplæringen har vi lært C-bibliotekets inngangs- og utgangsfunksjoner - printf, sprintf og scanf som kan brukes i C ++ ved å inkludere overskriften som tilsvarer C-headeren.
Som allerede diskutert, fungerer inngangs- og utgangsfunksjonene i bruksformatsspesifikatorer og plassholdere, og vi må spesifisere datatypene til variabler der data blir lest eller skrevet til.
I motsetning til dette bruker ikke streamingobjektene som brukes i C ++ - cin og cout, noen formatspesifikatorer eller plassholdere. De bruker overbelastet >> og<< operators to read in and write the data.
=> Sjekk ut den perfekte C ++ treningsguiden her.