formatting i o printf
Denna handledning diskuterar användningen och exempel på funktioner som printf, sprintf, scanf som används för att forma Input / Output i C ++:
I våra tidigare C ++ -studier har vi sett att vi kan utföra Input-Output-operationer i C ++ med cin / cout.
Förutom att använda dessa konstruktioner kan vi också använda C-biblioteket. Med C Standard Input and Output Library (cstdio, C ++ motsvarande för stdio.h-rubrik på C-språk) utför vi I / O-operationer med 'streams' som fungerar med fysiska enheter som tangentbord (standardingång), skrivare, terminaler (standardutgång) ) eller andra filtyper som stöds av operativsystemet.
=> Kontrollera de fördjupade C ++ -utbildningsövningarna här.
Strömmar är inget annat än en abstrakt enhet som används för att interagera med fysiska enheter på ett enhetligt sätt. Alla strömmar har liknande egenskaper och är oberoende av de fysiska medieenheterna.
I våra nästa ämnen i denna handledning kommer vi att lära oss i detalj om några funktioner, dvs. printf, sprint och scanf.
Vad du kommer att lära dig:
C ++ printf
Printf-funktionen i C ++ används för att skriva utdata som är formaterade till stdout.
Funktionsprototyp:
int printf (const char * format,…);
Parametrar:
format => En pekare till nollavslutad sträng skriven till filströmmen. Den består av tecken tillsammans med en valfri formatspecifikator som börjar med%. Formatspecifikatorn ersätts av lämpliga värden som följer formatsträngen.
... => Andra ytterligare argument som anger vilka data som ska skrivas ut i den ordning som formatet anges.
Returvärde:
provtestfall för bankansökan
Framgång => printf returnerar antalet tecken som returneras.
Fel => Negativt värde
Beskrivning:
Printf-funktionen definieras i rubriken. Printf-funktionerna skriver strängen som pekaren 'format' pekar till standardutmatningsstdout. Formatsträngen kan innehålla formatspecifikationer som sedan ersätts av variablerna som skickas till printf-funktionen som ytterligare argument (efter formatsträng).
Format Specifier Används i printf () -funktion
En allmän form av formatspecifikator är
%(flags)(width)(.precision)(length)specifier
Nedan följer en beskrivning av var och en av delarna i formatet:
- % tecken: Detta är ett ledande% -tecken
- Flaggor: De kan ha följande värden:
- -: Vänster motiverar resultatet inom fältet. Höger motiverat som standard.
- +: Tecknet på resultatet kopplat till början av värdet inklusive positiva resultat.
- Utrymme: I avsaknad av ett tecken är utrymme fäst vid början av resultatet.
- #: Ange en alternativ konverteringsform.
- 0: Används för heltal och flytande siffror. Fungera som ledande nollor i avsaknad av utrymme.
- Bredd: Anger minsta fältbredd i form av ett * eller ett heltal. Detta är valfritt.
- Precision: Anger precision med ett '.' Följt av ett * eller ett heltal eller ingenting. Detta är också valfritt.
- Längd: Det valfria argumentet som angav argumentets storlek.
- Specifier: Detta är en specifikationsformat för konverteringsformat.
Olika formatspecifikatorer som används i C ++ är följande:
Låt bli | Specifier | Beskrivning |
---|---|---|
7 | u | Konverterar osignerat heltal till decimalrepresentation. |
1 | % | Skriver ut en%. |
två | c | Skriver ut enstaka tecken. |
3 | s | Skriver ut en sträng. |
4 | d / i | Konverterar undertecknat heltal till decimalrepresentation. |
5 | eller | Konverterar osignerat heltal till oktalrepresentation. |
6 | x / X | Konverterar osignerat heltal till hexadecimal representation. |
8 | f / F | Konverterar flyttal till decimalrepresentation. |
9 | och / E | Konverterar flytande nummer till decimal exponentnotation. |
10 | a / A | Konverterar flytpunkt till en hexadecimal exponent. |
elva | g / G | Konverterar flytande nummer till decimal- eller decimaleksponentnotation. |
12 | n | Antal tecken som hittills skrivits av detta funktionsanrop. |
13 | sid | En pekare som pekar på Implementeringsdefinierad teckenföljd. |
Nedan följer ett komplett C ++ programmeringsexempel som demonstrerar ovan beskrivna printf-funktion.
C ++ printf Exempel
#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:
Ovanstående program använder olika samtal till printf-funktionen och vi noterar att varje samtal till printf använder olika formatspecifikationer som vi diskuterade ovan. Formatspecifikatorn% .3f anger ett flytvärde med upp till 3 decimaler. Resten av printf-samtalen visar tecken, decimal, oktal och hex.
C ++ sprintf
Sprintf-funktion i C ++ som liknar printf-funktionen utom med en skillnad. Istället för att skriva utdata till standardutdata stdout skriver sprintf utdata till en teckensträngbuffert.
Funktionsprototyp:
int sprintf (char * buffert, const char * format, ...)
Parametrar:
buffert => Pekare till en strängbuffert som resultatet ska skrivas till.
Format => Pekare till en nollavslutad sträng som skrivs till filströmmen.
Obs! Formatsträngen som används i sprintf-funktionen är densamma som den som diskuteras som en del av beskrivningen av printf-funktionen.
... => Andra ytterligare argument som anger vilka data som ska skrivas ut i den ordning som formatet anges.
Returvärde:
framgång => Returnerar antalet tecken skrivna till den tillräckligt stora bufferten exklusive det avslutande nollkaraktären.
Fel => Negativt värde returneras.
Beskrivning:
Sprintf-funktionen definieras i rubriken. Sprintf-funktionen används för att skriva en sträng pekad av formatet till strängbufferten. Strängformatet kan innehålla formatspecifikationer som börjar med% som ersätts av värdena på variabler som skickas till sprintf () -funktionen som ytterligare argument.
Låt oss se ett exempel på C ++ - program som visar användningen av sprintf-funktionen.
sprintf Exempel
#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 exemplet ovan skriver vi först en formaterad sträng till en teckenbuffert mybuf med sprintf-funktionen. Sedan visar vi strängen till stdout med hjälp av cout. Slutligen visar vi antalet tecken skrivna till mybuf-bufferten.
C ++ scanf
Scanf-funktionen i C ++ läser ingångsdata från standardinmatning stdin.
Funktionsprototyp:
int scanf (const char * format,…)
Parametrar:
format => Pekare till en nollavslutad sträng som definierar hur ingången ska läsas. Den här formatsträngen består av formatspecifikationer.
... => Ytterligare argument som tar emot dataingång. Dessa ytterligare argument är i följd enligt formatspecifikatorn.
Returvärde:
framgång => Returnerar ett antal inlästa tecken.
matchingFailure => Returnerar noll om matchningsfel inträffar innan det första mottagande argumentet tilldelas.
input Failure => Returnerar EOF om ett ingångsfel inträffar innan det första mottagande argumentet tilldelas.
Beskrivning:
Scanf () -funktionen definieras i rubriken. Denna funktion läser data från stdin och lagrar i de angivna variablerna.
Format Specifier Används i scanf () -funktion
Det allmänna formatet för scanf () -funktionsformatsträngen är:
%(*)(width)(length)specifier
Således har formatspecifikatorn följande delar:
- Icke-blankstegstecken: Dessa är tecknen utom% som förbrukar ett identiskt tecken från inmatningsströmmen.
- Mellanslagstecken: Alla efterföljande blankstegstecken betraktas som ett mellanslagstecken. Detsamma gäller escape-sekvenser också.
- Konverteringsspecifikation: Den har följande format:
- %: Tecken som anger början.
- *: Kallas uppdragsundertryckande karaktär. Om det finns, tilldelar scanf inte resultatet till några mottagande parametrar. Denna parameter är valfri.
- Fältbredd: Valfri parameter (ett positivt heltal) som anger en maximal fältbredd.
- Längd: Anger storleken på att ta emot ett argument.
Conversion Format Specifier kan vara enligt följande:
Låt bli | Formatspecifikator | Beskrivning |
---|---|---|
7 | x / X | Matchar osignerat hexadecimalt heltal. |
1 | % | Matchar bokstavlig%. |
två | c | Matchar enstaka tecken eller flera tecken upp till bredd. |
3 | s | Matchar sekvensen av icke-blankstegstecken tills angiven bredd eller första mellanslag. |
4 | d | Matchar decimal. |
5 | i | Matchar heltal. |
6 | eller | Matchar osignerat oktalt heltal. |
8 | u | Matchar osignerat decimaltal. |
9 | a / A, e / E, f / F, g / G | Matchar flytande nummer. |
10 | (uppsättning) | Matchar icke-.töm sekvens av tecken från den angivna uppsättningen. Om föregås av ^, matchas tecken som inte är i set. |
12 | n | Returnerar antalet lästa tecken hittills. |
13 | sid | Pekare till implementeringsspecifik karaktärsekvens. |
Därefter implementerar vi ett exempelprogram för att visa användningen av scanf-funktionen i C ++
scanf Exempel
#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 programmet ovan läser vi två inmatningssträngar och ett hexadecimalt tal. Sedan kombinerar vi de två strängarna och visar den resulterande strängen. Siffran konverteras till decimal och visas.
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. |
Definierad i 'stdio.h'. | Definierad i 'iostream'. |
scanf och printf är en funktion som används för I / O. | cin och cout är strömföremål. |
Formatsträngen används för att formatera in- och utdata. | Operatörer >> och<< are overloaded and used along with cin and cout respectively. Ingen formatsträng används. |
Vi anger vilken typ av data som används med platshållaren. | Inget behov av att specificera datatypen. |
Vanliga frågor
F # 1) Kan du använda printf i C ++?
Svar: Ja. Printf kan användas i C ++. För att använda den här funktionen i ett C ++ - program måste vi inkludera rubriken i programmet.
F # 2) Vilket språk använder printf?
Svar: Printf är standardutmatningsfunktionen på C-språk. Den kan också användas på C ++ - språk genom att inkludera rubriken i C ++ - programmet.
F # 3) Vad är% d i C-programmering?
Svar: % d-värde i printf-funktionen avser ett heltal.
F # 4) Varför & används i Scanf?
Svar: & operatör används för att komma åt minnesplatsen. Det är stenografi att skicka en pekare till variabeln istället för att skicka den uttryckligen.
F # 5) Vad är skillnaden mellan printf () och sprintf ()?
Svar: Både funktionerna printf () och sprintf () är samma förutom en skillnad. Medan printf () skriver utdata till stdout (standardutgång) skriver sprintf utdata till en teckensträngbuffert.
F # 6) Avslutar Sprintf null?
Svar: sprintf returnerar antalet tecken som är lagrade i teckensträngmatrisen exklusive nulltecken.
F # 7) Varför är sprintf osäkert?
Svar: Sprintf-funktionen kontrollerar inte destinationsbuffertens längd. Därför när formatsträngens längd är för lång kan funktionen orsaka överflödet av målbufferten. Detta kan leda till applikationsinstabilitet och säkerhetsproblem och därmed göra sprintf-funktionen osäker.
Slutsats
I denna handledning har vi lärt oss C-bibliotekets inmatningsfunktioner - printf, sprintf och scanf som kan användas i C ++ genom att inkludera rubriken som motsvarar C-header.
Som redan diskuterats, fungerar ingångs- och utgångsfunktionerna i användarformatsspecifikatorer och platshållare och vi måste specificera datatyperna av variabler där data läses eller skrivs till.
I motsats till detta använder de strömmande objekten som används i C ++ - cin och cout inga formatformat eller platshållare. De använder överbelastade >> och<< operators to read in and write the data.
=> Kolla in den perfekta C ++ träningsguiden här.