Resumen

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

ENTRADA Y SALIDA POR CONSOLA

La entrada y salida de datos se realiza a través de funciones de biblioteca, siendo un


sistema de E/S el que ofrece un mecanismo flexible, a la vez que consistente, para
transmitir datos entre dispositivos.

En lenguaje C existe E/S por consola y por archivo, ya que son mundos
conceptualmente diferentes, pero técnicamente el lenguaje C hace poca distinción entre
la E/S por consola y la E/S por archivo.

Las funciones de E/S por consola son aquellas que controlan la entrada por teclado y la
salida a través de pantalla, que es la E/S estándar del sistema; aunque la E/S estándar
puede ser dirigida a otros dispositivos. En general, cualquier función para ser usada en
el programa, debe ser declarada como tal mediante el "prototipo de función".

"El prototipo de función" consiste en la declaración de la función, que permite que el


lenguaje C lleve a cabo una comprobación de tipos y número de argumentos de la
función, así como el tipo de dato que retorna la función. Para lo cual se declara el
prototipo de la función al principio del programa.

ENTRADA Y SALIDA POR CONSOLLA CON FORMATO


Las funciones printf() y scanf() permiten comunicarse con el mundo exterior y realizar
la E/S con formato, esto es, pueden escribir o leer datos de cualquier tipo, incluyendo
caracteres, cadenas y números, en varias formas que pueden ser controladas.

SALIDA: printf ()

SALIDA CON FORMATO: Se llama salida con formato porque se especifica el tipo de
dato de las constantes, variables o expresiones a imprimirse, y en qué forma deben
mostrarse. Entonces, la impresión de una variable depende del tipo de dato del que se
trate para mostrar.
Si un "especificador de formato" no tiene argumento, el resultado, en el mejor de los
casos, se obtendrá datos sin sentido en la respectiva salida.
La función printf() retorna el número de caracteres escritos en la salida, o bien un valor
negativo si se produce un error.

Los "especifìcadores de formato" para la función printf() en el lenguaje C ANSI, se


muestra en la siguiente tabla:

CÓDIG FORMATO
O
%c Caracter
%d Entero decimal con signo
%i Entero decimal con signo
Punto flotante en notación científica (doble longitud,
%e
imprime e minúscula)
Punto flotante en notación científica (doble longitud,
%E
imprime E mayúscula)
%f Punto flotante en notación decimal
%g Usa %e o %f, el más corto (imprime e)
%G Usa %E o %f, el más corto (imprime E)
%o Entero octal sin signo
%s Cadena de caracteres
%u Entero decimal sin signo
Entero hexadecimal sin signo (imprime letras
%x minúsculas)
Entero hexadecimal sin signo (imprime letras
%X mayúsculas)
%p Mostrar un puntero
El argumento asociado es un puntero a entero al que
%n se asigna el número de caracteres escritos hasta que
aparezca %n.
%% Imprimir el caracter %

Los formatos de impresión son los siguientes:

 Impresión de un caracter. Se usa el especificador %c.

 Impresión de una cadena. Se utiliza especificador %s.

 Impresión de números. Se realiza de la siguiente forma:

-‐ Para enteros decimales con signo, se utiliza los especificadores


%d o %i.
-‐ Para enteros sin signo, se usa %u.
-‐ Para números de punto flotante en notación decimal se usa %f.
-‐ Para números de punto flotante en notación científica se utiliza %e y %E, estos
números tienen la siguiente forma:

x.ddddddE±yy

 Impresión de una dirección. Se utiliza el especificador %p. Por


ejemplo, si ejem es una variable de tipo int, y se desea imprimir su dirección se procede
así:

printf ("%p", &ejem);

 Especificador %n. Este especificador es diferente al resto, no imprime


nada, ya que el parámetro que corresponde a este especificador debe ser un puntero a
una variable, cuya dirección, después de la ejecución de printf(), tendrá el número de
caracteres que se han impreso hasta el punto en el cual se encontró %n. Por ejemplo,
como se muestra a continuación:

int cuenta;
printf ("El %nejemplo es demostrativo.\n", &cuenta); printf("%d", cuenta);

MODIFICADORES DE FORMATO
Los modificadores se agregan a los especificadores para modificar su salida, con el
objeto de alterar su significado, así: se puede especificar la longitud mínima de un
campo, el número de decimales y la justificación por la izquierda.

Los modificadores de formato se colocan entre el símbolo ' %' y "código de formato".

1.-Especificador de longitud mínima de campo. Hace la reservación de un espacio en


la salida para la impresión de un dato.

-‐Si el dato es menor a la longitud mínima de campo, se rellena la salida con


espacios por omisión.

-‐En el caso de que la cantidad a imprimir no quepa en el espacio asignado, se


usará automáticamente un campo mayor.

2.- El especificador de precisión. Consiste en un punto seguido de un entero, de


acuerdo al tipo dato al que se aplica. Los tipos de datos pueden ser:

Punto Flotante, es el que determina el número de posiciones decimales a imprimir.

Por ejemplo, "%10.4f", imprime un número de al menos 10 caracteres con cuatro


posiciones decimales.

Cadena de caracteres, es el número máximo de caracteres que se han de imprimir.

Por ejemplo, "%8.12s", imprime una cadena de al menos 8 caracteres y no más de 12


caracteres de longitud. El especificador de precisión tiene prioridad sobre la longitud de
campo.

Entero, es el que determina el número de dígitos que aparecerán por cada número a
imprimir. Para alcanzar el número requerido de dígitos se añaden ceros por delante.

3.- Ajuste a la salida. Por omisión, todas las salidas están ajustadas a la derecha de la
longitud de campo si esta longitud es mayor que el dato a imprimir, y si es menor, no
toma en cuenta la longitud de campo. Por ejemplo:

printf ("%10.2f", 341.566);

Imprimirá:

3 4 1 . 5 7
4.- Modificadores l y h. Los modificadores de formato l y h se aplican a
especificadores de formato d, i, o, u y x. Por ejemplo:

%ld ,imprime un entero largo.


%hd ,imprime un entero corto.
%hud ,imprime un entero corto sin signo.

El modificador l puede preceder a los especificadores de punto flotante e, f y g, los


mismos que indican que se imprime un dato double.

5.-Modificador #. Si el modificador # precede a los especificadores de formato g, f o e,


asegura que aparecerá un punto decimal, incluso si no hay dígitos decimales.

Si el modificador # precede a los especificadores de formato x, se imprimirá un número


hexadecimal con el prefijo 0x.

6.-Modificador *. Los especificadores de "longitud mínima de campo" y “precisión”


pueden ser pasados como argumentos a printf(), en lugar de hacerlo mediante
constantes. Es decir, se pasa los especificadores de formato como variables.

Por ejemplo:

int i = 10, j = 4;

printf ("%*.*f", i, j , 123.3);

Con esta función se tendrá una longitud mínima de campo de 10, una precisión de 4, y
el dato que se imprime es:

1 2 3 . 3 0 0 0
NOTA: Si se utiliza más de un modificador en el mismo sitio, el orden en que deberán ir
será el siguiente: ajuste de salida, especificador de longitud mínima de campo,
especificador de precisión, y modificadores de formato l y h.

ENTRADA: scanf ()

ENTRADA CON FORMATO: es la rutina de entrada por consola de propósito general,


pues lee todos los tipos de datos que suministra el compilador, convirtiendo
automáticamente al formato interno apropiado. Y luego de la entrada salta a la siguiente
línea.

El prototipo de la función scanf() es: (SCHILDT, 1994) int scanf (char*


cadena_control, lista_argumentos);
donde:
-‐ cadena_control, determina cómo se leen los valores de los datos en las variables a las
que se hace referencia en la lista_argumentos.

La cadena_controI consta de tres clases de caracteres:


Especificadores de formato.
Caracteres de espacio en blanco.
Caracteres distintos de espacios en blanco.

a) Especificadores de formato
Los especificadores de formato de entrada van precedidos por el caracter '%', e
indican a scanf() que tipo de dato se va a leer a continuación. Los especificadores de
formato se asocian de izquierda a derecha con los argumentos de la lista_argumentos.

Los especificadores de formato para la función scanf() se muestran en la siguiente tabla:


CÓDIG FORMATO
O
%c Leer un caracter
%d Leer un número entero decimal
%i Leer un número entero decimal
%e Leer un número de tipo punto flotante
%f Leer un número de tipo punto flotante
%g Leer un número de tipo punto flotante
%s Leer una cadena
%o Leer un número octal
%x Leer un número hexadecimal
%p Leer un puntero
Recibe un valor entero igual al número de
%n
caracteres leídos

PASO DE DIRECCIONES A scanf ()

Todas las variables que se utilizan para recibir valores a través de scanf() se deben pasar
por sus direcciones, esto significa que todos los argumentos de scanf() deben ser
punteros a las variables que reciben los valores.

MODIFICADORES DE FORMATO

Longitud de campo. Este modificador determina una longitud máxima de campo,


mediante un entero situado entre el % y el "código de formato", lo que limita el
número de caracteres leídos para ese campo. Si se encuentra un carácter blanco, la
lectura del campo puede terminar antes de que se alcance su longitud máxima.

Por ejemplo, para leer hasta 20 caracteres en una cadena puede procederse así:

scanf ("%20s", cad);

ELIMINACIÓN E ENTRADAS:

Se puede indicar a scanf() que lea un "campo" sin asignarlo a una variable. Esto se hace
precediendo el código de formato de ese campo con el caracter '*'. Por ejemplo, si en la
siguiente sentencia:

scanf ("%d%*c%d", &x, &y);

se ingresa:

10, 10 <ENTER>

ENTRADA/ SALIDA DE CARACTERES POR CONSOLA: Esta entrada/salida


permite solamente la lectura y escritura de cadenas de caracteres por consola.

La función gets() lee una cadena de caracteres introducida por teclado, hasta
que se pulse un retorno de carro o una marca EOF (ctrl Z), y la almacena en la
dirección apuntada por su argumento de tipo puntero a caracter. El caracter de
salto de línea no forma parte de la cadena, éste se transforma en un caracter
nulo ('\0') para indicar el final de la cadena. Luego de realizar la entrada de la
cadena, el cursor se posiciona en el inicio de la siguiente línea.

El prototipo de la función gets() es:


char *gets (char *cadena);

donde:
-‐cadena, es un arreglo de caracteres.

La función gets() retorna un puntero a la cadena, si se ejecuta correctamente, y


un puntero nulo en caso de error.

No hay límite al número de caracteres que leerá gets(), por lo tanto, debe
asegurarse de que el arreglo apuntado por cadena no supere sus límites.

Por ejemplo:

Realizar el ingreso de una cadena que acepte cualquier nombre (incluyendo


espacios en blanco) de hasta 80 caracteres de largo:

/* PROG0303.C*/
/* Leer un nombre con la función gets (). */
#include <stdio.h>
void main ()
{
char nombre[81]; char *ptr;
printf ("¿Hola, cómo te llamas?\n");
ptr = gets (nombre);

printf ("¿%s?. Ah! %s!\n", nombre, ptr);


}
Una posible salida sería:
¿Hola, cómo te llamas?
Pedro Pablo <ENTER>
¿Pedro Pablo?. Ah! Pedro Pablo!

SALIDA: pust ()

La función puts() escribe en la pantalla la cadena apuntada por su argumento.


El caracter nulo se transforma en un caracter de salto de línea, posicionándose
el cursor al principio de la siguiente línea.

El prototipo de la función puts() es:

int puts (char *cadena);


donde: - cadena, es un puntero a char.
La función puts() retorna un valor de salto de línea, en caso de error obtiene
EOF.

La función puts() requiere mucho menos espacio y se ejecuta más


rápidamente que printf(), porque puts() solo puede imprimir una cadena de
caracteres y no imprime números ni realiza conversiones de formato.

También podría gustarte