ANEXO 3
ANEXO 3
ANEXO 3
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
MIGUEL Á. TOLEDO MARTÍNEZ<br />
<strong>ANEXO</strong> 3<br />
LA FUNCIÓN printf<br />
Cuando lea los programas de otras personas, frecuentemente se encontrará con la función<br />
printf, éste es el enunciado de salida estándar original de C. Como C++ es una mejora a C, esta<br />
función sigue vigente en C++. Todavía hay programadores de C++ que prefieren el printf en<br />
lugar de los flujos de E/S más recientes que vienen con C++, por lo que es probable que los<br />
encuentre. Además hay unas cuantas características adicionales de la función printf que algunas<br />
veces pueden hacer que sea más deseable en lugar de los flujos más nuevos. La función se<br />
encuentra prototipeada en el archivo de cabecera stdio.h.<br />
La sintaxis general para el enunciado printf es la siguiente:<br />
int printf(const char *format[, argumento, ...]);<br />
El parámetro format es un arreglo de carácter que contiene el texto que será enviado a la<br />
salida. Además de ese parámetro pueden haber argumentos adicionales a la función. La<br />
necesidad de argumentos adicionales y lo que sus tipos deban ser, es determinada por la<br />
necesidad del contenido del arreglo de carácter format de incluir instrucciones de formateo que<br />
a su vez requieran parámetros propios.<br />
La función printf proporciona mucha potencia y presenta controles formateados. El<br />
primer paso para el formateo es el uso de secuencias de escape especiales que permiten<br />
incorporar caracteres especiales. Todas estas secuencias de escape comienzan con el carácter de<br />
diagonal inversa (\) y se muestra en la tabla anexo 3.1.<br />
La función printf también le permite incorporar valores de variable en su salida con el<br />
uso de instrucciones de formateo. La sintaxis general para la instrucción de formateo individual<br />
es:<br />
%[bandera][ancho][.precisión][F | N | h | l | L] <br />
La opción bandera indica la alineación, signos numéricos, puntos decimales y ceros<br />
iniciales de la salida. Además, estos indicadores también especifican los prefijos octal y<br />
hexadecimal. La tabla anexo 3.2 muestra las opciones para los indicadores en la cadena de<br />
formato para la función printf.<br />
La opción ancho indica la cantidad mínima de caracteres desplegados. La función printf<br />
usa ceros y blancos para rellenar la salida en caso necesario. Cuando la cantidad de ancho<br />
comienza con un 0, la función printf usa ceros iniciales en lugar de espacios para relleno.<br />
Cuando aparece el carácter * en lugar de un número de ancho, la función printf obtiene la cifra<br />
de anchura actual a partir de la lista de argumentos de la función. El argumento que especifica el<br />
ancho requerido debe venir antes del argumento que, de hecho, se está formateando. El siguiente<br />
es un ejemplo que despliega el entero 2 usando 3 caracteres, como se especifica por el segundo<br />
argumento de printf.<br />
printf(“%*d, 3, 2)<br />
<strong>ANEXO</strong> 2 2 - 1
MIGUEL Á. TOLEDO MARTÍNEZ<br />
La opción precisión especifica la cantidad máxima de caracteres desplegados. Si incluye<br />
un entero, la opción de precisión define la cantidad mínima de dígitos por desplegar. Cuando se<br />
usa el carácter * en lugar de un número de precisión, la función printf obtiene la precisión actual<br />
a partir de la lista de argumentos. El argumento que especifica la precisión requerida debe venir<br />
antes del argumento que se está formateando. El siguiente ejemplo que despliega el número de<br />
punto flotante 3.3244 utilizando 10 caracteres, como se especifica por el tercer argumento de<br />
printf:<br />
printf(“%7.*f”, 10, 3.3244)<br />
Las opciones F, N, h, l y L son opciones de tamaño que se usan para anular el tamaño<br />
predeterminado del argumento. Las opciones F y N se usan junto con apuntadores far y near,<br />
respectivamente. Las opciones h, l y L se usan para indicar un short, int, long y long double,<br />
respectivamente.<br />
Anexo 3.1. Las secuencias de escape<br />
Secuencia Valor decimal Valor hexadecimal Tarea<br />
\a 7 0x07 Señal audible<br />
\b 8 0x08 Retroceso<br />
\f 12 0x0C Avance de línea<br />
\n 10 0x0A Línea nueva<br />
\r 13 0x0D Retorno de carro<br />
\t 9 0x09 Tabulador horizontal<br />
\v 11 0x0B Tabulador vertical<br />
\\ 92 0x5C Diagonal inversa<br />
\’ 44 0x2C Comilla simple<br />
\” 34 0x22 Comilla doble<br />
\? 63 0x3F Signo de interrogación 1 a 3 dígitos para el<br />
\xhhh o<br />
\Xhhh<br />
valor octal.<br />
0xhhh Valor hexadecimal<br />
La función printf requiere que especifique un carácter de tipo de dato con cada código de<br />
formato %. La tabla anexo 3.2. muestra las opciones para el indicador en la cadena de formato<br />
de printf.<br />
Anexo 3.2. Opciones para los indicadores en la cadena de formato de la función printf<br />
Opción de formato Resultado<br />
- Alinea a la izquierda dentro del campo especificado.<br />
+ Despliega el signo de más o de menos de un valor.<br />
En blanco Despliega un blanco inicial si el valor es positivo y un signo de menos si el valor<br />
es negativo.<br />
# No tiene efecto en los enteros decimales, pero despliega 0x o 0X inicial para<br />
enteros hexadecimales, un cero inicial para enteros octales y el punto decimal para<br />
los números reales.<br />
La tabla anexo 3.3. muestra los caracteres de tipo de dato que se usan en la cadena de<br />
formato de printf.<br />
<strong>ANEXO</strong> 2 2 - 2
MIGUEL Á. TOLEDO MARTÍNEZ<br />
Anexo 3.3. Caracteres de tipo de dato usados en la cadena de formato de printf<br />
Categoría Carácter de tipo Resultado<br />
Carácter c Un solo carácter.<br />
d int decimal con signo.<br />
i int decimal con signo.<br />
o int octal sin signo.<br />
u int decimal sin signo.<br />
x int hexadecimal sin signo, y el juego de caracteres usados es<br />
0123456789ªbcdef (observe las letras minúsculas).<br />
X int hexadecimal sin signo, y el juego de caracteres usados es<br />
0123456789ªBCDEF (observe las letras mayúsculas).<br />
Apuntador p Despliega solamente el desplazamiento para apuntadores near como<br />
0000 y despliega los apuntadores far como SSSS:0000.<br />
Apuntador a<br />
int<br />
n Almacena el número de caracteres escritos hasta este punto.<br />
Real f Despliega valor con signo en el formato [-]dddd.dddd<br />
e Despliega valor científico con signo en el formato [-<br />
]d.dddde[+ | - ]ddd.<br />
E Despliega valor científico con signo en el formato [-<br />
]d.ddddE[+ | -]ddd.<br />
g Despliega valor con signo usando los formatos f o e, dependiendo del<br />
valor y de la precisión especificada. (La E en minúscula).<br />
G Despliega valor con signo usando los formatos f o e, dependiendo del<br />
valor y de la precisión especificada. (La E en mayúscula).<br />
Categoría Carácter de tipo Resultado<br />
Apuntador a<br />
cadena<br />
s Despliega caracteres hasta que se llega al terminador nulo de la<br />
cadena.<br />
DESPLEGAR VALORES DE tipo int CON printf<br />
Para desplegar valores de tipo int con printf, debe utilizar el especificador de formato<br />
%d. El siguiente programa: ENTSAL.CPP, utiliza %d para valores y variables de tipo int.<br />
/* El siguiente programa: ENTSAL.CPP, ilustra el uso del especificador de formateo %d */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
int edad = 41;<br />
int altura = 73;<br />
int peso = 165;<br />
printf("La edad del usuario es: %d peso: %d altura: %d\n",<br />
edad, peso, altura);<br />
printf("%d mas %d igual a %d\n", 1, 2, 1 + 2);<br />
} //Fin de main()<br />
<strong>ANEXO</strong> 2 2 - 3
MIGUEL Á. TOLEDO MARTÍNEZ<br />
DESPLEGAR LA REPRESENTACIÓN OCTAL O HEXADECIMAL DE UN VALOR ENTERO<br />
En ocasiones deseará desplegar un valor entero en formato octal o hexadecimal. El<br />
especificador de formato %o le indica a printf que despliegue un valor en octal. De manera<br />
semejante los especificadores de formato %x y %X le indican a printf que despliegue un valor<br />
en hexadecimal. La diferencia entre %x y %X es que esta última visualiza los dígitos<br />
hexadecimales en mayúsculas (A, B, C, D, E, F). El siguiente programa: OCTHEX.CPP, ilustra<br />
el uso de %o, %x y %X.<br />
/* El siguiente programa: OCTHEX.CPP, ilustra el uso de los especificadores de formateo<br />
%0, %x, %X<br />
*/<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
int valor = 255;<br />
printf("El valor decimal de %d en octal es %o\n",<br />
valor, valor);<br />
printf("El valor decimal de %d en hexadecimal es %x\n",<br />
valor, valor);<br />
DESPLEGAR VALORES DE tipo unsigned int UTILIZANDO printf<br />
printf("El valor decimal de %d en hexadecimal es %X\n",<br />
valor, valor);<br />
}//Fin de main()<br />
Para desplegar valores de tipo unsigned int con printf, debe utilizar el especificador de<br />
formato %u. El siguiente programa: SINSIGNO.CPP, utiliza los especificadores de formato %u<br />
y %d para desplegar el valor 42000. El programa ilustra el tipo de error que puede ocurrir si<br />
utiliza un especificador de formato equivocado.<br />
/* El siguiente programa: SINSIGNO.CPP, ilustra el uso del especificador de formateo<br />
%u, y el el error que se comete si no se utiliza el especificador adecuado.<br />
*/<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
unsigned int valor = 42000;<br />
printf("Desplegando 42000 como unsigned %u\n", valor);<br />
printf("Desplegando 42000 como int %d\n", valor);<br />
} //Fin de main()<br />
DESPLEGAR VALORES DE tipo long int USANDO printf<br />
Para desplegar valores de tipo long int con printf, debe utilizar el especificador de<br />
formato %ld. El siguiente programa: LARGO.CPP, usa el especificador de formato %ld y %d<br />
para desplegar el valor 1000000. El programa ilustra el tipo de error que puede ocurrir si utiliza<br />
el especificador de formato erróneo.<br />
<strong>ANEXO</strong> 2 2 - 4
MIGUEL Á. TOLEDO MARTÍNEZ<br />
/* El siguiente programa: LARGO.CPP, ilustra el uso del especificador de formateo<br />
%ld, y el el error que se comete si no se utiliza el especificador adecuado.<br />
*/<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
long int unMillon = 1000000;<br />
printf ("Un millón es %ld\n", unMillon);<br />
printf ("Un millón es %d\n", unMillon);<br />
} //Fin de main()<br />
DESPLEGAR VALORES DE tipo float UTILIZANDO printf<br />
Para desplegar valores de tipo float con printf, debe utilizar el especificador de formato<br />
%f. El siguiente programa: FLOTANTE.CPP, ilustra el uso del especificador de formato %f<br />
para desplegar valores de punto flotante.<br />
/* El siguiente programa: FLOTANTE.CPP, ilustra el uso del especificador de formateo %f.*/<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
float precio = 525.75;<br />
float tasaImpuesto = 0.06;<br />
printf("El precio del artículo es %f\n", precio);<br />
printf("El importe del impuesto es %f\n", precio * tasaImpuesto);<br />
}//Fin de main()<br />
DESPLEGAR VALORES DE tipo char UTILIZANDO printf<br />
Para desplegar valores de tipo char con printf, debe utilizar el especificador de formato<br />
%c. El siguiente programa: CARACTER.CPP, utiliza el especificador de formato %c para<br />
desplegar la letra A en la pantalla.<br />
/* El siguiente programa: CARACTER.CPP, ilustra el uso del especificador de formateo %c */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
printf("La letra es %c\n", 'A');<br />
printf("La letra es %c\n", 65);<br />
} //Fin de main()<br />
DESPLEGAR VALORES DE punto flotante EN FORMATO CIENTÍFICO<br />
Para desplegar un valor de punto flotante en formato científico, utilice el especificador<br />
de formato %e o %E. La diferencia entre %e y %E es que el especificador de formato %E le<br />
indica a la función printf que utilice la letra mayúscula E en la salida. El siguiente programa:<br />
<strong>ANEXO</strong> 2 2 - 5
MIGUEL Á. TOLEDO MARTÍNEZ<br />
EXPONENTE.CPP, utiliza %e y %E para desplegar los valores de punto flotante en su formato<br />
científico.<br />
/* El siguiente programa: EXPONENTE.CPP, ilustra el uso del especificador de formateo %e y %E */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
float pi = 3.14159;<br />
float radio = 2.0031;<br />
printf("El área del círculo es %e\n", 2 * pi * radio);<br />
printf("El área del círculo es %E\n", 2 * pi * radio);<br />
} //Fin de main()<br />
DESPLEGAR VALORES DE PUNTO FLOTANTE USANDO FORMATO DECIMAL O CIENTÍFICO<br />
printf soporta los especificadores de formato %g y %G, para utilizar los especificadores<br />
de formato %f o %e, dependiendo de la precisión con que se esté trabajando. El siguiente<br />
programa: PORCIENG.CPP, ilustra el uso de %g.<br />
/* El siguiente programa: PORCIENG.CPP, ilustra el uso del especificador de formateo %g */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
printf("Al desplegar 0.1234 vemos %g\n", 0.1234);<br />
printf("Al desplegar 0.00001234 vemos %g\n", 0.00001234);<br />
} //Fin de main()<br />
DESPLEGAR cadena de caracteres UTILIZANDO printf<br />
Para desplegar una cadena de caracteres utilizando printf, use el especificador de<br />
formato %s. El siguiente programa: CADENA.CPP, utiliza el especificador de formato %s para<br />
desplegar una cadena de caracteres.<br />
/* El siguiente programa: CADENA.CPP, ilustra el uso del especificador de formateo %s */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
char titulo[255] = "Cien años de soledad.";<br />
printf("El nombre del libro es: %s\n", titulo);<br />
} //Fin de main()<br />
<strong>ANEXO</strong> 2 2 - 6
MIGUEL Á. TOLEDO MARTÍNEZ<br />
DESPLEGAR UN apuntador UTILIZANDO printf<br />
Para desplegar un apuntador utilizando printf, debe utilizar el especificador de formato<br />
%p. El siguiente programa: APUNTADOR.CPP, utiliza el especificador de formato %p para<br />
visualizar una dirección en la memoria de la computadora.<br />
/* El siguiente programa: APUNTADOR.CPP, ilustra el uso del especificador de formateo %p */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
int valor;<br />
} //Fin de main()<br />
printf("La dirección de la variable valor es: %p\n",<br />
&valor);<br />
PRECEDENCIA DE UN VALOR CON EL SIGNO (+) O EL SIGNO (-)<br />
Para indicarle a printf que despliegue el signo (positivo o negativo) de un valor,<br />
simplemente incluya el signo + inmediatamente después del % en el especificador de formato.<br />
El siguiente programa: MSTSIGNO.CPP, ilustra el uso del signo + con el especificador de<br />
formato.<br />
/* El siguiente programa: MSTSIGNO.CPP, ilustra el uso del especificador de formateo + */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
}//Fin de main()<br />
int entNegativo = -5;<br />
int entPositivo = 5;<br />
float fltNegativo = -100.23;<br />
float fltPositivo = 100.23;<br />
printf("Los valores enteros son : %+d y %+d\n",<br />
entNegativo, entPositivo);<br />
printf("Los valores de punto flotante son: %+f y %+f\n",<br />
fltNegativo, fltPositivo);<br />
FORMATEO DE UN valor entero UTILIZANDO printf<br />
Cuando utiliza %d, puede indicarle a printf que despliegue un número mínimo de<br />
caracteres. El siguiente programa: FMTENT.CPP, ilustra como puede formatear valores enteros<br />
utilizando %d.<br />
<strong>ANEXO</strong> 2 2 - 7
MIGUEL Á. TOLEDO MARTÍNEZ<br />
/* El siguiente programa: FMTENT.CPP, ilustra el uso de como indicarle a printf()<br />
que visualice un número mínimo de dígitos enteros.<br />
*/<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
int valor = 5;<br />
printf ("%1d\n", valor);<br />
printf ("%2d\n", valor);<br />
printf ("%3d\n", valor);<br />
printf ("%4d\n", valor);<br />
}//Fin de main()<br />
RELLENO DE CEROS A LA IZQUIERDA<br />
En ocasiones deseará que printf preceda el valor con ceros en oposición a espacios en<br />
blanco. Para indicarle a printf esta tarea, coloque un cero inmediatamente después del<br />
especificador de formato % y antes del número y antes del número mínimo de dígitos. El<br />
siguiente programa: RELLENO.CPP, ilustra este uso de printf.<br />
/* El siguiente programa: RELLENO.CPP, ilustra el uso de rellenos de ceros por la izquierda */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
int valor = 5;<br />
printf ("%01d\n", valor);<br />
printf ("%02d\n", valor);<br />
printf ("%03d\n", valor);<br />
printf ("%04d\n", valor);<br />
}//Fin de main()<br />
DESPLEGAR UN prefijo ANTES DE VALORES OCTAL Y HEXADECIMAL<br />
Para indicarle a printf que preceda a los valores octal y hexadecimal con un 0 y 0x<br />
respectivamente, coloque un carácter de número (#) inmediatamente después del especificador<br />
de formato %. El siguiente programa: PREFIJO.CPP, ilustra el uso de # en el especificador de<br />
formato de printf.<br />
<strong>ANEXO</strong> 2 2 - 8
MIGUEL Á. TOLEDO MARTÍNEZ<br />
/* El siguiente programa: PREFIJO.CPP, ilustra la forma de escribir como prefijo 0 , 0x<br />
0X, en números octales y hexadecimales, respectivamente.<br />
*/<br />
#include //Para printf<br />
void main (void)<br />
{<br />
int valor = 255;<br />
printf("El valor decimal %d en octal es : %#o\n",<br />
valor, valor);<br />
printf("El valor decimal %d en hexadecimal es: %#x\n",<br />
valor, valor);<br />
printf("El valor decimal %d en hexadecimal es: %#X\n",<br />
valor, valor);<br />
}//Fin de main()<br />
FORMATEO DE UN VALOR DE punto flotante UTILIZANDO printf<br />
Cuando formatea un valor de punto flotante, especifica dos valores. El primer valor le<br />
indica el número mínimo de caracteres que desea desplegar. El segundo valor le indica el<br />
número de dígitos que desea visualizar a la derecha del punto decimal. El siguiente programa:<br />
FMTFLT.CPP, ilustra el uso de estos dos valores:<br />
/* El siguiente programa: FMTFLT.CPP, ilustra como indicar el número mínimo de caracteres y<br />
el número de dígitos a la derecha del punto decimal, para números de punto flotante<br />
*/<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
float valor = 1.23456;<br />
printf ("%8.1f\n", valor);<br />
printf ("%8.3f\n", valor);<br />
printf ("%8.5f\n", valor);<br />
}//Fin de main()<br />
FORMATEO DE UN VALOR EN notación científica UTILIZANDO printf<br />
Utilizando una técnica similar a la del ejemplo anterior, puede formatear valores en<br />
notación científica. El siguiente programa: FMTEXP.CPP, ilustra el uso de este formateo con<br />
printf.<br />
<strong>ANEXO</strong> 2 2 - 9
MIGUEL Á. TOLEDO MARTÍNEZ<br />
/* El siguiente programa: FMTEXP.CPP, ilustra como indicar el número mínimo de caracteres y<br />
el número de dígitos a la derecha del punto decimal, para números en notación científica.<br />
*/<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
float valor = 1.23456;<br />
printf ("%12.1e\n", valor);<br />
printf ("%12.3e\n", valor);<br />
printf ("%12.5e\n", valor);<br />
}//Fin de main()<br />
JUSTIFICACIÓN A LA IZQUIERDA CON printf<br />
Por omisión, printf despliega los textos justificados a la derecha. En ocasiones deseará<br />
cambiar la justificación por omisión e imprimir los textos justificados a la izquierda. Para<br />
justificar un texto a la izquierda utilice un signo menos (-) inmediatamente después del<br />
especificador de formato %. El siguiente programa: JUSTIZQ.CPP, ilustra el uso del signo<br />
menos para justificar a la izquierda la salida.<br />
/* El siguiente programa: JUSTIZQ.CPP, ilustra el concepto de justificación a la derecha<br />
y a la izquierda a la salida de un printf().<br />
*/<br />
#include //Para printf()<br />
void main ()<br />
{<br />
int intValor = 5;<br />
float fltValor = 3.33;<br />
printf("Justificado a la derecha %5d valor\n", intValor);<br />
printf("Justificado a la izquierda %-5d valor\n", intValor);<br />
printf("Justificado a la derecha %7.2f valor\n", fltValor);<br />
printf("Justificado a la izquierda %-7.2f valor\n", fltValor);<br />
}//Fin de main()<br />
COMBINACIÓN DE especificadores de formato<br />
En ocasiones es deseable utilizar más de un especificador de formato. Por ejemplo<br />
visualizar un valor hexadecimal, justificado a la izquierda y precedido de los caracteres ox. En<br />
este caso simplemente coloque cada especificador después de %. El siguiente programa:<br />
VARFMT.CPP, ilustra el uso de varios especificadores de formato.<br />
<strong>ANEXO</strong> 2 2 - 10
MIGUEL Á. TOLEDO MARTÍNEZ<br />
/* El siguiente programa: VARFMT.CPP, ilustra el uso de formatos combinados */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
int intValor = 5;<br />
printf("Justificado a la izquierda con signo %-+3d\n",intValor);<br />
}//Fin de main()<br />
DESPLEGAR cadenas near Y far<br />
Si desea desplegar el contenido de una cadena far utilizando printf, debe indicárselo a<br />
printf. Para hacer esto, utilice una F inmediatamente después de %. De igual manera si la cadena<br />
es de tipo near debe indicárselo utilizando una N. Conviene saber que se utiliza N por omisión.<br />
El siguiente programa: CERLEJOS.CPP, ilustra el uso de %Fs y %Ns con printf.<br />
/* El siguiente programa: CERLEJOS.CPP, ilustra el manejo de cadenas NEAR y FAR */<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
char *nearTitulo = "Cien años de soledad";<br />
char far *farTitulo = "Cien años de soledad";<br />
printf("El título del libro es: %Ns\n", nearTitulo);<br />
printf("El título del libro es: %Fs\n", farTitulo);<br />
}//Fin de main()<br />
NÚMERO DE CARACTERES QUE printf A DESPLEGADO<br />
Cuando utiliza el especificador de formato %n, printf asignará a la variable (pasada por<br />
referencia) un contador del número de caracteres desplegados. El siguiente programa:<br />
CNTIMPRE.CPP, ilustra el uso del especificador de formato %n.<br />
/* El siguiente programa: CNTIMPRE.CPP, ilustra el uso del especificador de formato %n */<br />
#include //Para printf()<br />
void main(void)<br />
{<br />
int primerContador;<br />
int segundoContador;<br />
printf("Cien años%n de soledad%n\n", &primerContador, &segundoContador);<br />
printf("Primer contador %d. Segundo contador %d\n", primerContador, segundoContador);<br />
}//Fin de main()<br />
<strong>ANEXO</strong> 2 2 - 11
MIGUEL Á. TOLEDO MARTÍNEZ<br />
UTILIZACIÓN DEL VALOR DE RETORNO DE printf<br />
Cuando termina de ejecutarse printf, regresa el número total de caracteres desplegados. Si<br />
printf encuentra algún error, devuelve la constante EOF. El siguiente programa:<br />
IMPREOK.CPP, ilustra el uso del valor de retorno de printf.<br />
/* El siguiente programa: IMPREOK.CPP, ilustra el uso del valor de retorno de la<br />
función printf()<br />
*/<br />
#include //Para printf()<br />
void main (void)<br />
{<br />
int resultado;<br />
resultado = printf("¡Cien años de soledad!\n");<br />
if (resultado == EOF)<br />
fprintf(stderr, "Error dentro de printf\n");<br />
} //Fin de main()<br />
El programa siguiente: SALFMT.CPP, despliega salida formateada usando la función<br />
printf. El programa despliega los mismos números de punto flotante usando tres juegos<br />
diferentes de código de formato.<br />
/* El siguiente programa: SALFMT.CPP, despliega los mismos números de punto flotante<br />
usando tres juegos diferentes de código de formato.<br />
*/<br />
#include //Para printf()<br />
void main(void)<br />
{<br />
int unEnt = 67;<br />
unsigned char unByte = 128;<br />
char unCar = '@';<br />
float unSingle = 355.0;<br />
double unDouble = 1.130e+002;<br />
printf("%3d + %2d = %3d\n\n", unByte, unEnt, unByte + unEnt );<br />
printf("La salida utiliza el formato %%lf:\n");<br />
printf(" %6.4f / %6.4lf = %7.5lf\n\n", unSingle, unDouble, unSingle / unDouble );<br />
printf("La salida utiliza el formato %%le:\n");<br />
printf(" %6.4e / %6.4le = %7.5le\n\n", unSingle, unDouble, unSingle / unDouble );<br />
printf("La salida utiliza el formato %%lg :\n");<br />
printf(" %6.4g / %6.4lg = %7.5lg\n\n", unSingle, unDouble, unSingle / unDouble );<br />
printf("El caracter en la variable unCar es %c\n\n", unCar);<br />
printf("El código ASCII de %c es %d\n\n", unCar, unCar);<br />
}//Fin de main()<br />
<strong>ANEXO</strong> 2 2 - 12
MIGUEL Á. TOLEDO MARTÍNEZ<br />
USO DEL MANEJADOR DE DISPOSITIVO ANSI<br />
Aunque printf proporciona especificadores de formato que le permiten controlar el<br />
número de dígitos desplegados, justificación a la izquierda o a la derecha de textos, desplegado<br />
en octal o hexadecimal, printf no proporciona especificadores de formato que le permitan<br />
posicionar el cursor en un renglón y columna determinados, limpiar la pantalla o desplegar<br />
salidas en colores. Sin embargo, dependiendo del sistema operativo en el que este trabajando,<br />
probablemente pueda realizar las operaciones anteriores utilizando el manejador de dispositivo<br />
ANSI. El manejador ANSI soporta varias secuencias de escape que le permiten utilizar colores,<br />
posicionar el cursor y limpiar la pantalla. Se llama secuencias de escape ya que comienzan con el<br />
carácter de escape ASCII (el valor 27) Si está utilizando el sistema operativo DOS, puede<br />
instalar el manejador ANSI colocando en el archivo CONFIG.SYS la siguiente entrada<br />
(reinicialice la computadora después de escribir la entrada):<br />
DEVICE = C:\DOS\ANSI.SYS<br />
Después de instalar el manejador, sus programas pueden escribir secuencias de escape<br />
utilizando printf.<br />
USO DEL MANEJADOR ANSI PARA BORRAR LA PANTALLA<br />
Una de las operaciones más frecuentes que requieren sus programas al principio es<br />
limpiar la pantalla. Desgraciadamente, las librerías en tiempo de ejecución de C no<br />
proporcionan una función que realice esta tarea. Sin embargo utilizando el manejador ANSI,<br />
puede utilizar la siguiente secuencia de escape para borrar la pantalla:<br />
Esc[2J<br />
Una forma sencilla de imprimir el carácter Esc es utilizar su representación en octal<br />
(\033), como se muestra a continuación:<br />
printf(“\033[2J”);<br />
UTILIZACIÓN DEL MANEJADOR ANSI PARA DESPLEGAR COLORES EN LA PANTALLA<br />
La tabla siguiente proporciona la secuencia de escape para realizar esta tarea:<br />
SECUENCIA DE ESCAPE COLOR<br />
Esc[30m Frente negro<br />
Esc[31m Frente rojo<br />
Esc[32m Frente verde<br />
Esc[33m Frente naranja<br />
Esc[34m Frente azul<br />
Esc[35m Frente magenta<br />
Esc[36m Frente cian<br />
Esc[37m Frente blanco<br />
Esc[40m Fondo negro<br />
Esc[41m Fondo rojo<br />
Esc[42m Fondo verde<br />
Esc[43m Fondo naranja<br />
Esc[44m Fondo azul<br />
Esc[45m Fondo magenta<br />
<strong>ANEXO</strong> 2 2 - 13
MIGUEL Á. TOLEDO MARTÍNEZ<br />
Esc[46m Fondo cian<br />
Esc[47m Fondo blanco<br />
El enunciado printf siguiente selecciona fondo azul:<br />
printf(“\033[44m”);<br />
El enunciado printf siguiente selecciona frente rojo en fondo blanco:<br />
printf(“\033[47m\033[31m);<br />
En este último ejemplo, printf escribe dos secuencias de escape. El manejador ANSI le<br />
permite especificar colores de pantalla separadas por punto y como, como se muestra a<br />
continuación:<br />
printf(“\033[47m;31m);<br />
USO DEL MANEJADOR ANSI PARA POSICIONAR EL CURSOR<br />
La tabla siguiente proporciona las secuencias de escape para posicionar el cursor en<br />
cierto renglón y columna.<br />
SECUENCIA<br />
DE ESCAPE FUNCIÓN EJEMPLO<br />
Esc[#;#H Ubica cursor en renglón/columna Esc[10;25H<br />
Esc[#A Mueve cursor hacia arriba # renglones Esc[1A<br />
Esc[#B Mueve cursor hacia abajo # renglones Esc[2B<br />
Esc[#C Mueve cursor derecha # columnas Esc[10C<br />
Esc[#D Mueve cursor izquierda # columnas Esc[10D<br />
Esc[S Almacena la posición actual del cursor Esc[S<br />
Esc[U Restaura la posición del cursor Esc[U<br />
Esc[2j Limpia la pantalla, mueve cursor al Esc[2j<br />
principio<br />
Esc[K Mueve de la posición actual hasta Esc[K<br />
el final de la pantalla<br />
<strong>ANEXO</strong> 2 2 - 14