formatting i o printf
Denne vejledning diskuterer brugen og eksempler på funktioner som printf, sprintf, scanf, der bruges til dannelse af input / output i C ++:
I vores tidligere C ++ tutorials har vi set, at vi kan udføre Input-Output-operationer i C ++ ved hjælp af cin / cout.
Bortset fra at bruge disse konstruktioner, kan vi også gøre brug af C-biblioteket. Ved hjælp af C Standard Input og Output Library (cstdio, C ++ ækvivalent for stdio.h header på C-sprog) udfører vi I / O-operationer ved hjælp af 'streams', der fungerer med fysiske enheder som tastaturer (standard input), printere, terminaler (standard output ) eller andre filtyper, der understøttes af operativsystemet.
=> Tjek dybdegående C ++ træningsvejledninger her.
Strømme er intet andet end en abstrakt enhed, der bruges til at interagere med fysiske enheder på en ensartet måde. Alle streams har lignende karakteristika og er uafhængige af de fysiske medieenheder.
I vores næste emner i denne vejledning lærer vi detaljeret om nogle få funktioner, dvs. printf, sprint og scanf.
Hvad du lærer:
- C ++ printf
- C ++ sprintf
- C ++ scanf
- scanf / printf Vs. cin / cout I C ++
- Ofte stillede spørgsmål
- Konklusion
C ++ printf
Printf-funktionen i C ++ bruges til at skrive det output, der er formateret til stdout.
Funktionsprototype:
int printf (const char * format,…);
Parametre:
format => En markør til nul-afsluttet streng skrevet til filstrøm. Den består af tegn sammen med en valgfri formatspecifikator, der begynder med%. Formatspecifikatoren erstattes af passende værdier, der følger formatstrengen.
… => Andre yderligere argumenter, der specificerer de data, der skal udskrives i den rækkefølge, formatet er specificeret.
Returværdi:
youtube til mp3 online konverter anmeldelser
Succes => printf returnerer antallet af returnerede tegn.
Fejl => Negativ værdi
Beskrivelse:
Printf-funktionen er defineret i header. Printf-funktionerne skriver den streng, som 'format' -markøren peger på til standardoutput-stdout. Formatstrengen kan indeholde formatspecifikatorer, som derefter erstattes af de variabler, der sendes til printf-funktionen som yderligere argumenter (efter formatstreng).
Format Specifier Anvendes i printf () -funktion
En generel form for formatspecifikator er
%(flags)(width)(.precision)(length)specifier
Nedenfor er en beskrivelse af hver af delene af formatspecifikator:
- % skilt: Dette er et førende% tegn
- Flag: De kan have følgende værdier:
- -: Venstre retfærdiggør resultatet inden for feltet. Højre retfærdiggjort som standard.
- +: Tegn på resultatet knyttet til begyndelsen af værdien inklusive positive resultater.
- Rum: I mangel af et tegn er plads knyttet til begyndelsen af resultatet.
- #: Angiv en alternativ form for konvertering.
- 0: Bruges til heltal og flydende tal. Handle som ledende nuller i fravær af plads.
- Bredde: Angiver minimum feltbredde i form af en * eller en heltal værdi. Dette er valgfrit.
- Præcision: Angiver præcision med et '.' Efterfulgt af et * eller et heltal eller intet. Dette er også valgfrit.
- Længde: Det valgfri argument, der angav størrelsen på argumentet.
- Specifikator: Dette er et konverteringsformat specificeret.
Forskellige formatspecifikatorer, der anvendes i C ++, er som følger:
Ingen | Specifikator | Beskrivelse |
---|---|---|
7 | u | Konverterer usigneret heltal til decimalrepræsentation. |
en | % | Udskriver en%. |
to | c | Udskriver enkelt tegn. |
3 | s | Udskriver en streng. |
4 | d / i | Konverterer underskrevet heltal til decimalrepræsentation. |
5 | eller | Konverterer usigneret heltal til oktal repræsentation. |
6 | x / X | Konverterer usigneret heltal til hexadecimal repræsentation. |
8 | f / F | Konverterer flydende tal til decimalrepræsentation. |
9 | og / E | Konverterer flydende nummer til decimal eksponentnotation. |
10 | a / A | Konverterer flydende nummer til en hexadecimal eksponent. |
elleve | g / G | Konverterer flydende nummer til decimal- eller decimaleksponentnotation. |
12 | n | Antal tegn, der hidtil er skrevet af dette funktionsopkald. |
13 | s | En markør, der peger på implementeringsdefineret tegnsekvens. |
Nedenfor er et komplet C ++ programmeringseksempel, der demonstrerer den ovenfor beskrevne printf-funktion.
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; }
Produktion:
Ovenstående program bruger forskellige opkald til printf-funktionen, og vi bemærker, at hvert opkald til printf bruger forskellige formatspecifikationer, som vi diskuterede ovenfor. Formatspecifikatoren% .3f angiver en floatværdi med op til 3 decimaler. Resten af printf-opkald viser tegn-, decimal-, oktal- og hex-værdier.
C ++ sprintf
Sprintf-funktion i C ++ svarende til printf-funktion undtagen med en forskel. I stedet for at skrive output til standard output stdout, skriver sprintf output til en tegnstrengebuffer.
Funktionsprototype:
int sprintf (char * buffer, const char * format, ...)
Parametre:
buffer => Markør til en strengbuffer, som resultatet skal skrives til.
Format => Markør til en null-afsluttet streng, der er skrevet til filstrømmen.
Bemærk: Formatstrengen, der bruges i sprintf-funktionen, er den samme som den, der diskuteres som en del af beskrivelsen af printf-funktionen.
… => Andre yderligere argumenter, der specificerer de data, der skal udskrives i den rækkefølge, formatet er specificeret.
Returværdi:
succes => Returnerer antallet af tegn, der er skrevet til den tilstrækkeligt store buffer eksklusive det afsluttende nultegn.
Fejl => Negativ værdi returneres.
Beskrivelse:
Sprintf-funktionen er defineret i overskriften. Sprintf-funktionen bruges til at skrive en streng peget af formatet til strengbufferen. Strengformatet kan indeholde formatspecifikationer, der starter med%, som erstattes af værdierne for variabler, der sendes til sprintf () -funktionen som yderligere argumenter.
Lad os se et eksempel på C ++ - program, der viser brugen af sprintf-funktionen.
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; }
Produktion:
I eksemplet ovenfor skriver vi først en formateret streng til en tegnbuffer mybuf ved hjælp af sprintf-funktionen. Derefter viser vi strengen til stdout ved hjælp af cout. Endelig viser vi antallet af tegn, der er skrevet til mybuf-bufferen.
C ++ scanf
Scanf-funktionen i C ++ læser inputdata fra standard input stdin.
Funktionsprototype:
int scanf (const char * format,…)
Parametre:
format => Markør til en nultermineret streng, der definerer, hvordan input skal læses. Denne formatstreng består af formatspecifikatorer.
… => Yderligere argumenter, der modtager datainput. Disse yderligere argumenter er i rækkefølge i henhold til formatspecifikatoren.
Returværdi:
succes => Returnerer et antal tegn, der er indlæst.
matchingFailure => Returnerer nul, hvis matchingsfejl opstår, før det første modtagelsesargument tildeles.
input Fejl => Returnerer EOF, hvis der opstår en inputfejl, før det første modtagelsesargument tildeles.
Beskrivelse:
Scanf () -funktionen er defineret i overskriften. Denne funktion læser data fra stdin og gemmer i de angivne variabler.
Format Specifier Anvendt i scanf () -funktion
Det generelle format til scanf () -funktionsformatstrengen er:
%(*)(width)(length)specifier
Formatspecifikatoren har således følgende dele:
- Ikke-mellemrumstegn: Dette er tegnene undtagen%, der bruger et identisk tegn fra inputstrømmen.
- Mellemrumstegn: Alle på hinanden følgende mellemrumstegn betragtes som et mellemrumstegn. Det samme gælder også for escape-sekvenser.
- Konverteringsspecifikation: Det har følgende format:
- %: Tegn, der angiver begyndelsen.
- *: Kaldt opgave undertrykkende karakter. Hvis til stede, tildeler scanf ikke resultatet til modtagende parametre. Denne parameter er valgfri.
- Feltbredde: Valgfri parameter (et positivt heltal), der angiver en maksimal feltbredde.
- Længde: Angiver størrelsen på at modtage et argument.
Konverteringsformat Specifier kan være som følger:
Ingen | Formatspecifikator | Beskrivelse |
---|---|---|
7 | x / X | Matcher usigneret hexadecimalt heltal. |
en | % | Matcher bogstavelig%. |
to | c | Matcher enkelt tegn eller flere tegn op til bredden. |
3 | s | Matcher sekvensen af tegn, der ikke er mellemrum, indtil den angivne bredde eller det første mellemrum. |
4 | d | Matcher decimal. |
5 | jeg | Matcher heltal. |
6 | eller | Matcher usigneret oktalt heltal. |
8 | u | Matcher usigneret decimaltal. |
9 | a / A, e / E, f / F, g / G | Matcher flydende nummer. |
10 | (sæt) | Matcher ikke-.-Let rækkefølge af tegn fra det givne sæt. Hvis der er forud for ^, matches tegn, der ikke er i sæt. |
12 | n | Returnerer antallet af læste tegn indtil videre. |
13 | s | Markør til implementeringsspecifik tegnsekvens. |
Dernæst implementerer vi et eksempelprogram for at demonstrere brugen af scanf-funktion 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; }
Produktion:
I ovenstående program læser vi to inputstrenge og et hexadecimalt tal. Derefter kombinerer vi de to strenge og viser den resulterende streng. Nummeret konverteres til decimal og vises.
scanf / printf Vs. cin / cout I C ++
scanf / printf | cin / pris |
---|---|
Standard input-output på C-sprog. | Standard input-output på C ++ sprog. |
Defineret i 'stdio.h'. | Defineret i 'iostream'. |
scanf og printf er en funktion, der bruges til I / O. | cin og cout er stream-objekter. |
Formatstrengen bruges til formatering af input og output. | Operatører >> og<< are overloaded and used along with cin and cout respectively. Ingen formatstreng bruges. |
Vi specificerer datatypen ved hjælp af pladsholder. | Ingen grund til at specificere datatypen. |
Ofte stillede spørgsmål
Q # 1) Kan du bruge printf i C ++?
Svar: Ja. Printf kan bruges i C ++. For at bruge denne funktion i et C ++ - program skal vi medtage overskriften i programmet.
Q # 2) Hvilket sprog bruger printf?
Svar: Printf er standardoutputfunktionen på C-sprog. Det kan også bruges på C ++ - sprog ved at inkludere overskriften i C ++ - programmet.
Q # 3) Hvad er% d i C-programmering?
Svar: % d-værdi i printf-funktion refererer til et heltal.
Spørgsmål nr. 4) Hvorfor og bruges i Scanf?
Svar: & operatør bruges til at få adgang til hukommelsesplaceringen. Det er stenografi at sende en markør til variablen i stedet for at give den eksplicit.
Q # 5) Hvad er forskellen mellem printf () og sprintf ()?
Svar: Både funktionerne printf () og sprintf () er ens bortset fra en forskel. Mens printf () skriver output til stdout (standardoutput), skriver sprintf output til en tegnstrengebuffer.
Q # 6) Afslutter Sprintf null?
Svar: sprintf returnerer antallet af tegn, der er gemt i tegnstrengarray, undtagen nulltermineringstegnet.
Spørgsmål nr. 7) Hvorfor er sprintf usikker?
Svar: Sprintf-funktionen kontrollerer ikke længden på destinationsbufferen. Derfor, når længden af formatstrengen er for lang, kan funktionen forårsage overløb af destinationsbufferen. Dette kan føre til applikationsinstabilitet og sikkerhedsproblemer og dermed gøre sprintf-funktionen usikker.
Konklusion
I denne vejledning har vi lært C-bibliotekets input-outputfunktioner - printf, sprintf og scanf, der kan bruges i C ++ ved at inkludere headeren, der svarer til C-header.
Som allerede diskuteret fungerer input-output-funktionerne i brugsformatspecifikatorer og pladsholdere, og vi skal specificere datatyperne af variabler, hvor data læses eller skrives til.
I modsætning til dette bruger de streamingobjekter, der bruges i C ++ - cin og cout, ikke nogen formatspecifikationer eller pladsholdere. De bruger overbelastet >> og<< operators to read in and write the data.
=> Tjek den perfekte C ++ træningsvejledning her.