10.05.2013 Views

ANEXO 3

ANEXO 3

ANEXO 3

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!