formatting i o printf
Aquest tutorial parla de l'ús i exemples de funcions com printf, sprintf, scanf que s'utilitzen per a la formació d'entrada / sortida en C ++:
En els nostres tutorials anteriors de C ++, hem vist que podem realitzar operacions d’entrada-sortida en C ++ mitjançant cin / cout.
A part d’utilitzar aquestes construccions, també podem fer ús de la biblioteca C. Utilitzant la Biblioteca d’entrada i sortida estàndard C (cstdio, equivalent C ++ per a la capçalera stdio.h en llenguatge C), realitzem operacions d’E / S mitjançant “fluxos” que funcionen amb dispositius físics com teclats (entrada estàndard), impressores, terminals (sortida estàndard) ) o qualsevol altre tipus de fitxer admès pel sistema operatiu.
=> Consulteu aquí els tutorials de formació en profunditat de C ++.
Els fluxos no són altra cosa que una entitat abstracta que s’utilitza per interactuar amb dispositius físics d’una manera uniforme. Tots els fluxos tenen característiques similars i són independents dels dispositius de suports físics.
En els nostres propers temes d’aquest tutorial, coneixerem detalladament algunes funcions, és a dir, printf, sprint i scanf.
Què aprendreu:
- C ++ printf
- C ++ sprintf
- C ++ scanf
- scanf / printf vs. cin / cout A C ++
- Preguntes freqüents
- Conclusió
C ++ printf
La funció printf a C ++ s’utilitza per escriure la sortida formatada a stdout.
Prototip de funció:
int printf (format const char *, ...);
Paràmetres:
format => Un punter a una cadena de terminació nul·la escrita al flux de fitxers. Consta de caràcters juntament amb un especificador de format opcional que comença amb%. L'especificador de format se substitueix per valors adequats que segueixen la cadena de format.
... => Altres arguments addicionals que especifiquen les dades que s’imprimiran en l’ordre en què s’especifica el format.
Valor de retorn:
com afegir el complement svn a l'eclipsi
Èxit => printf retorna el nombre de caràcters retornats.
Fracàs => Valor negatiu
Descripció:
La funció printf es defineix a la capçalera. Les funcions printf escriuen la cadena que apunta el punter 'format' a la sortida de sortida estàndard. La cadena de format pot contenir especificadors de format que després se substitueixen per les variables que es passen a la funció printf com a arguments addicionals (després de la cadena de format).
Especificador de format utilitzat a la funció printf ()
Una forma general d'especificador de format és
%(flags)(width)(.precision)(length)specifier
A continuació es mostra una descripció de cadascuna de les parts de l’especificador de format:
- % signe: Aquest és un primer signe de%
- Banderes: Poden tenir els valors següents:
- -: Esquerra justifica el resultat dins del camp. Per defecte, justificat a la dreta.
- +: El signe del resultat adjunt al començament del valor, inclosos els resultats positius.
- Espai: si no hi ha cap signe, l’espai s’adjunta al principi del resultat.
- #: Especifiqueu una forma alternativa de conversió.
- 0: s'utilitza per a nombres enters i de coma flotant. Actua com a zeros inicials en absència d’espai.
- Amplada: Especifica l'amplada mínima del camp en forma de * o un valor enter. Això és opcional.
- Precisió: Especifica la precisió amb un '.' Seguit d'un * o d'un enter o res. Això també és opcional.
- Llargada: L'argument opcional que especifica la mida de l'argument.
- Especificador: Es tracta d’un especificador de format de conversió.
Els diversos especificadors de format utilitzats en C ++ són els següents:
no | Especificador | Descripció |
---|---|---|
7 | tu | Converteix un nombre enter sense signe en representació decimal. |
1 | % | Imprimeix un%. |
2 | c | Imprimeix un sol caràcter. |
3 | s | Imprimeix una cadena. |
4 | d / i | Converteix un nombre enter signat en representació decimal. |
5 | o | Converteix un nombre enter sense signe en representació octal. |
6 | x / X | Converteix un nombre enter sense signe en representació hexadecimal. |
8 | f / F | Converteix el número de coma flotant en representació decimal. |
9 | i / E | Converteix el número de coma flotant en notació d’exponent de decimal. |
10 | a / A | Converteix el número de coma flotant en un exponent hexadecimal. |
11 | bona partida | Converteix el número de coma flotant en notació decimal o exponent decimal. |
12 | n | Nombre de caràcters escrits fins ara per aquesta trucada de funció. |
13 | pàg | Un punter que apunta a la seqüència de caràcters definida per la implementació. |
A continuació es mostra un exemple complet de programació de C ++ que demostra la funció printf comentada anteriorment.
C ++ printf Exemple
#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; }
Sortida:
El programa anterior utilitza diverses trucades a la funció printf i observem que cada trucada a printf utilitza diversos especificadors de format que hem comentat anteriorment. L'especificador de format% .3f indica un valor flotant amb fins a 3 xifres decimals. La resta de trucades printf mostren els valors de caràcter, decimal, octal i hexadecimal.
C ++ sprintf
Funció Sprintf en C ++ similar a la funció printf excepte amb una diferència. En lloc d’escriure la sortida a la sortida de sortida estàndard, sprintf escriu la sortida a una memòria intermèdia de cadenes de caràcters.
Prototip de funció:
int sprintf (buffer char *, format const char *, ...)
Paràmetres:
memòria intermèdia => Punter a un buffer de cadena on s'ha d'escriure el resultat.
Format => Punter a una cadena de terminació nul·la que s’escriu al flux de fitxers.
Nota: La cadena de format que s’utilitza a la funció sprintf és la mateixa que es discuteix com a part de la descripció de la funció printf.
... => Altres arguments addicionals que especifiquen les dades que s’imprimiran en l’ordre en què s’especifica el format.
Valor de retorn:
èxit => Retorna el nombre de caràcters escrits a la memòria intermèdia prou gran excloent el caràcter nul que finalitza.
Fracàs => Es torna el valor negatiu.
Descripció:
La funció Sprintf es defineix a la capçalera. La funció sprintf s’utilitza per escriure una cadena apuntada pel format al buffer de cadenes. El format de la cadena pot contenir especificadors de format que comencen amb% que se substitueixen pels valors de les variables que es passen a la funció sprintf () com a arguments addicionals.
Vegem un exemple de programa C ++ que mostra l'ús de la funció sprintf.
sprintf Exemple
#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; }
Sortida:
En l'exemple anterior, primer, escrivim una cadena formatada a un buffer de caràcters mybuf mitjançant la funció sprintf. A continuació, mostrem la cadena a stdout mitjançant cout. Finalment, mostrem el nombre de caràcters escrits al buffer mybuf.
C ++ scanf
La funció scanf en C ++ llegeix les dades d'entrada de l'entrada estàndard estàndard.
Prototip de funció:
int scanf (format const char *, ...)
Paràmetres:
format => Punter a una cadena de terminació nul·la que defineix com llegir l'entrada. Aquesta cadena de format consisteix en especificadors de format.
... => Arguments addicionals que reben l'entrada de dades. Aquests arguments addicionals estan en seqüència segons l'especificador de format.
Valor de retorn:
èxit => Retorna una sèrie de caràcters llegits.
falla coincident => Retorna zero si es produeix un error de coincidència abans que s'assigni el primer argument de recepció.
Error d'entrada => Retorna EOF si es produeix un error d'entrada abans que s'assigni el primer argument de recepció.
Descripció:
La funció Scanf () es defineix a la capçalera. Aquesta funció llegeix les dades de stdin i emmagatzema a les variables proporcionades.
Especificador de format utilitzat a la funció scanf ()
El format general de la cadena de format de la funció scanf () és:
%(*)(width)(length)specifier
Per tant, l’especificador de format té les parts següents:
- Caràcter sense espais en blanc: Aquests són els caràcters excepte el% que consumeix un caràcter idèntic del flux d’entrada.
- Caràcter d'espai en blanc: Tots els caràcters d'espai en blanc consecutius es consideren com un caràcter d'espai en blanc. El mateix passa amb les seqüències d’escapament.
- Especificació de conversió: Té el format següent:
- %: Caràcter que especifica el començament.
- *: Caràcter anomenat que suprimeix el caràcter. Si és present, scanf no assigna el resultat a cap paràmetre receptor. Aquest paràmetre és opcional.
- Amplada del camp: Paràmetre opcional (un enter positiu) que especifica una amplada màxima de camp.
- Llargada: Especifica la mida de rebre un argument.
L'especificador de format de conversió pot ser el següent:
no | Especificador de format | Descripció |
---|---|---|
7 | x / X | Coincideix amb un enter hexadecimal sense signar. |
1 | % | Coincideix amb el% literal. |
2 | c | Coincideix amb un sol caràcter o diversos caràcters fins a l'amplada. |
3 | s | Coincideix la seqüència de caràcters que no són espais en blanc fins a l'amplada especificada o el primer espai en blanc. |
4 | d | Coincideix amb el decimal. |
5 | jo | Coincideix amb un enter. |
6 | o | Coincideix amb un enter octal sense signar. |
8 | tu | Coincideix amb un enter decimal sense signar. |
9 | a / A, e / E, f / F, g / G | Coincideix amb un número de coma flotant. |
10 | (conjunt) | Coincideix amb seqüències de caràcters no buides del conjunt donat. Si va precedit de ^, els caràcters no inclosos coincideixen. |
12 | n | Retorna el nombre de caràcters llegits fins ara. |
13 | pàg | Punter a la seqüència de caràcters específica de la implementació. |
A continuació, implementarem un programa de mostra per demostrar l’ús de la funció scanf a C ++
scanf Exemple
#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; }
Sortida:
Al programa anterior, llegim dues cadenes d’entrada i un nombre hexadecimal. A continuació, combinem les dues cadenes i mostrem la cadena resultant. El número es converteix en decimal i es mostra.
scanf / printf vs. cin / cout A C ++
scanf / printf | cin / cost |
---|---|
Entrada-sortida estàndard en llenguatge C. | Entrada-sortida estàndard en llenguatge C ++. |
Definit a 'stdio.h'. | Definit a 'iostream'. |
scanf i printf són una funció que s’utilitza per a E / S. | cin i cout són objectes de flux. |
La cadena de format s'utilitza per formatar l'entrada i la sortida. | Operadors >> i<< are overloaded and used along with cin and cout respectively. No s'utilitza cap cadena de format. |
Especifiquem el tipus de dades mitjançant el posicionador. | No cal especificar el tipus de dades. |
Preguntes freqüents
P # 1) Podeu utilitzar printf a C ++?
Resposta: Sí. Printf es pot utilitzar en C ++. Per utilitzar aquesta funció en un programa C ++, hem d’incloure la capçalera al programa.
P # 2) Quin idioma utilitza printf?
Resposta: Printf és la funció de sortida estàndard en llenguatge C. També es pot utilitzar en llenguatge C ++ incloent la capçalera al programa C ++.
P # 3) Què és% d a la programació C?
Resposta: El valor% d a la funció printf fa referència a un valor enter.
Q # 4) Per què i s'utilitza a Scanf?
Resposta: & L'operador s'utilitza per accedir a la ubicació de la memòria. És abreujat passar un punter a la variable en lloc de passar-lo explícitament.
Q # 5) Quina diferència hi ha entre printf () i sprintf ()?
Resposta: Tant les funcions printf () com sprintf () són les mateixes excepte una diferència. Mentre printf () escriu la sortida a stdout (sortida estàndard), el sprintf escriu la sortida a un buffer de cadena de caràcters.
Q # 6) Sprintf finalitza?
Resposta: sprintf retorna el nombre de caràcters emmagatzemats a la matriu de cadenes de caràcters excloent el caràcter de terminació nul·la.
P # 7) Per què sprintf no és segur?
Resposta: La funció Sprintf no comprova la longitud del buffer de destinació. Per tant, quan la longitud de la cadena de format és massa llarga, la funció pot provocar el desbordament de la memòria intermèdia de destinació. Això pot provocar problemes d’inestabilitat i seguretat de l’aplicació, cosa que fa que la funció sprintf sigui insegura.
Conclusió
En aquest tutorial, hem après les funcions d’entrada-sortida de la biblioteca C: printf, sprintf i scanf que es poden utilitzar a C ++ incloent la capçalera que equival a la capçalera C.
Com ja s’ha comentat, les funcions d’entrada-sortida utilitzen els especificadors de format i els titulars de lloc i hem d’especificar els tipus de dades de variables en què es llegeixen o s’escriuen les dades.
Contràriament a això, els objectes de transmissió utilitzats a C ++ - cin i cout no utilitzen cap especificador de format ni marcador de posició. Utilitzen >> i sobrecarregats<< operators to read in and write the data.
=> Consulteu aquí la guia d’entrenament perfecta de C ++.
Lectura recomanada
- Funcions de cadena de Python
- Funcions de data VBScript: Funcions de format de data, DataAdd i cDate
- Variables i funcions de JMeter
- Funcions Python
- Funcions de biblioteca a C ++
- Funcions de scripts Unell Shell amb paràmetres i retorn
- Funcions de data i hora a C ++ amb exemples
- Funcions d'amistat a C ++