![]() |
Índex |
Ja hem vist que hi ha dades de diferents tipus i que la funció printf necessita saber el tipus de dades que ha d'escriure per saber com les ha d'escriure. En la següent taula veiem els diferents tipus i els seus especificadors de conversió.
El següent programa produeix la sortida per pantalla de la dreta:
Programa | Sortida per pantalla |
#include <stdio.h>
int main(void) { double dia = 23.457; printf("|%+15.9f|",dia); return 0; } |
| +23.457000000| |
L'especificador de format és %+15.9f que es composa de 6 parts: % [flags] [llarg] [.prec] [F|N|h|l|L] tipus
Tot el que és entre claudàtors pot ometre-se ometre. No més és obligatori el signe de %, de principi de l'especificador, i el tipus de dades que vol imprimir-se imprimir; de fet, a l'exemple no s'ha utilitzat la cinquena part. Així printf("|%23.475|",dia) produiria la sortida |23.457000|.
¿Que fan les quatre parts que resten?
Parts de l'especificador | El que fa |
|
Justificació de sortida, signes numèrics, punts decimals, zeros de sortida, octal i hexadecimal prefix. |
|
Mínim de caràcters a imprimir, amb replè d'espais o zeros. |
|
Màxim de caràcters a imprimir. Per als enters és el mínim de dígits a imprimir. |
|
Número de decimals que ha d'escriure. Sobre-escriu el mida del tipus de variable per defecte i són F, N, h, l, L. 1.1. |
Flag | El que fa |
|
Justifica a esquerra i omple el resta de la dreta amb blancs. |
|
Si el signe és positiu posa un + i si és negatiu posa un -. |
|
En les dades numèriques fa que si són positives deixi un blanc a l'esquerra i si són negatives posi el signe menys |
|
Especifica que l'argument ha de convertir-se amb la forma alternativa (veure pàgina 402, primera taula, del Borland C++ library reference). |
Especificador de llarg | El que fa |
|
S'imprimeixen els n caràcters següents a la posició actual del cursor. Si la dada conté menys de n caràcters la sortida s'omple amb blancs. |
|
El mateix però els caràcters s'omplen amb zeros i no amb blancs. |
|
El llarg del camp s'ha de especificar en la llista d'argumentes en la dada d'una variable, y l'asterisc es substituït per la dada. |
Especificador de precisió | El que fa |
No escrit | Precisió per defecte segons el tipus de dades:
default = 1 per als tipus d,i,o,u,x,X default = 6 per als tipus e,E,f default = tots els dígits significatius per als tipus g,G |
|
Per als tipus d,i,o,u,x és la precisió per defecte; per als tipus e,E,f no s'imprimeix el punt decimal. |
|
s'imprimeixen n caràcters o n xifres decimals. Si el valor de sortida té més xifres significatives o bé són truncades o bé son arrodonides. |
|
El llarg de la precisió s'ha de especificar en la llista d'argumentes en la dada d'una variable, y l'asterisc es substituït per la dada. |
%d per
al tipus int
%ld per al
tipus long int
Modificador de mida de la va-riable. | El que fa |
|
El tipus és llegit com a punter llunyà. |
|
El tipus és llegit com a punter proper. |
|
El tipus és interpretat com a short int per a d, i, o, u, x, X. |
|
El tipus és interpretat com a long int per
a d, i, o, u, x, X.
És interpretat com a double per a e, E, f, g, G. |
|
El tipus és interpretat com a long double per a e, E, f, g, G. |
Especificació de conversió | Argument d'entrada | Sortida per pantalla |
|
||
|
sencer | Sencer decimal amb signe. |
|
sencer | Sencer decimal amb signe. |
|
sencer | Sencer octal sense signe. |
|
sencer | Sencer decimal sense signe. |
|
sencer | Sencer hexadecimal sens signe (amb a, b, c, d ,e, f). |
|
sencer | Sencer hexadecimal sens signe (amb A, B, C, D, E, F). |
|
Coma flotant | Valor amb signe de la forma [-]dddd.dddd. |
|
Coma flotant | Valor amb signe de la forma [-d.dddd] o e [+/-]ddd. |
|
Coma flotant | Valor amb signe en format e o f, amb un número donat de decimals de precisió. Els zeros i punts decimal surten si és necesari. |
|
Coma flotant | El mateix que e però amb format exponencial amb E. |
|
Coma flotant | El mateix que g però amb exponent E si s'utilitza el format e. |
|
||
|
caràcter | Caràcter simple. |
|
punter a string | Imprimeix caràcters fins que un caràcter de terminació (\0) es detectat. |
|
res | |
|
||
|
punter a int | |
|
punter |
|
Valor | Nom | La funció imprimeix printf |
|
07 | BEL | Pita |
|
08 | BS | Espai darrera |
|
0A | LF | Nova línia |
|
0D | CR | Principi de línia |
|
09 | HT | Tabulador horitzontal |
|
5C | \ | Barra invertida |
|
27 | ' | Cometa Doble |
|
22 | " | Cometa |
|
3F | ? | Interrogant |
|
0= tres dígits octals, imprimeix el caràcter corresponent. | ||
|
H= dos dígits hexadecimals, imprimeix el caràcter corresponent. |
#include <stdio.h>
#include <math.h> int main(void)
double dia = 23.457;
double x = 5000.0, y = 0.0025;
char linia[80];
short int a=127;
char letra='A';
return 0;
|
2.000000 3.000000 5.000000 2.236068
|23.457000|
5000.000000 0.002500 12.500000 2000000.000000
Hola que tal
127 7f 154373
55547
65 A |
Els especificadors de formats per a la funció scanf són:
% [*] [llarg] [F|N] [h|l|L] tipus_de_dades
Parts de l'especificador | El que fa |
|
Suprimeix l'assignació del següent camp d'entrada |
|
Màxim número de caràcters a llegir. Alguns caràcters han de ser llegits si la funció scanf troba espais en blanc o caràcters no convertibles. |
|
Ignora la mida per defecte de la direcció
de l'argument e indica la nova mida.
|
|
Ignora el tipus d'argument defecte de la direcció
de l'argument e indica el nou tipus.
|
Els especificadors de conversió só els següents:
Especificació de conversió | Entrada esperada | Tipus d'argument |
Numèrics | ||
|
Sencer base deu | Punter a int (int *arg) |
|
Sencer base deu | Punter a long (long *arg) |
|
Sencer octal | Punter a int (int *arg) |
|
Sencer octal | Punter a long (long *arg) |
|
Sencer decimal, octal o hexadecimal | Punter a int (int *arg) |
|
Punter a long (long *arg) | |
|
Sencer decimal sense signe | Punter a unsigned int unsigned long *arg) |
|
Punter a unsigned long (unsigned long *arg) | |
|
Sencer hexadecimal | Punter a int (int *arg) |
|
Coma flotant | Punter a float (float *arg) |
|
Coma flotant | Punter a float (float *arg) |
|
Coma flotant | Punter a float (float *arg) |
Caràcters | ||
|
Cadena de caràcters | Punter a matriu de caràcters (char arg[]) |
|
Caràcter | Punter a caràcter (char *arg) |
|
% caràcter | |
Punters | ||
Veure Library Reference pag. 446. |
#include <stdio.h>
void main(void) { int a; float r1, r2; printf("Introdueix un número sencer "); scanf("%d",&a); printf("Introdueix dos números reals separats per un espai en blanc "); scanf("%f %f", &r1, &r2); printf("Has introduït el número enter %d i els números reals %f i %f\n", a, r1, r2); } |
#include <stdio.h>
void main(void) { char nom[45]; printf("Escriu solament el teu nom ");
|
#include <stdio.h>
void main(void) { char tecles[100]; clrscr(); printf("Escriu coses en el teclat, i agafaré només les tecles a, e, i,o, u "); scanf("%[aeiou]", tecles); printf("has escrit %s\n",tecles); } |
#include <stdio.h>
void main(void) { char nom1[45]; clrscr(); printf("Ara pots escriure el teu nom i dos cognoms, agafaré les tres paraules "); scanf("%[^\n]", nom); printf("Mol de gust de conèixer-te %s\n",nom); } |
include <stdio.h>
void main(void) { char tecles[100]; clrscr(); printf("Escriu coses en el teclat, i agafaré
només les tecles ");
|
#include <stdio.h>
int main(void)
printf("Escriu una línia de text\n");
return 0;
|