You are on page 1of 7

Entradas y Salidas del Lenguaje C

ENTRADA Y SALIDA DEL LENGUAJE C

Se refiere a las operaciones que se producen en el teclado y en la pantalla de la


computadora. En C no hay palabras claves para realizar l as acciones de Entrada/Salida,
estas se hacen mediante el uso de las funciones de la biblioteca estándar (stadio.h).
Para utilizar las funciones de E / S debemos incluir en el pro grama el archivo de
cabecera, ejemplo: stdio.h, mediante la declaratoria:
#include <stdio.h>

Las Funciones de E/S más simples son getchar() que lee un carácter del teclado, espera
un retorno, es decir un enter y el eco aparece. Es decir la tecla presionada.

putchar(): Imprime un carácter en la pantalla, en la posición actual del cursor.


Algunas variaciones:
getche(): Aparece el Eco
getch(): No aparece el eco
estas instrucciones se encuentran en la biblioteca conio.h

Programa que espera que se presiona una tecla, la muestra en pantalla, y además
muestra el carácter siguiente:

Ejemplo 2.1:
#include <stdio.h>
#include <conio.h>
main()
{
char car;
clrscr(); /*Se encarga de borrar la pantalla por eso se
llama clear screen*/
car=getchar();
putchar(car+1);
getch();
return 0;
}

Ejemplo 2.2:
#include <stdio.h>
#include <conio.h>
main()
{
char x; /*Declaramos x como caracter*/
printf("Para Finalizar Presione cualquier Tecla:");
x= getchar();/*Captura y muestra el caracter presionado*/
getch();/*Espera a que se presione cualquier otra tecla
para finalizar*/
return 0;
}

Facultad de Informática UPONIC


Entradas y Salidas del Lenguaje C

FUNCIONES DE ENTRADA Y SALIDA ( printf y scanf)

Salida de datos con formato: la función printf()


La función printf() (de “print” = imprimir y “f” = formato) sirve para escribir datos en el
dispositivo de salida estándar (generalmente la pantalla) con un formato determinado
por el programador. La forma general de utilizarla es la siguiente:
printf(cadena_de_formato, datos);

El prototipo de printf() se encuentra en el archivo de cabecera stdio.h (de “std” =


standard e “io” = input/output, es decir, entrada/salida; por lo tanto, “stdio” es un
acrónimo de “entrada/salida estándar”)

El primer argumento, la cadena_de_formato, especifica el modo en el que se deben


mostrar los datos que aparecen a continuación. Esta cadena se compone de una serie
de códigos de formato que indican a C qué tipo de datos son los que se desean
imprimir. Todos los códigos están precedidos del símb olo de porcentaje (“%”). Por
ejemplo, el código “%i” indica a la función que se desea escribir un número de tipo int,
y el código “%f”, que se desea escribir un número real de tipo float.

La forma más simple de utilizar printf() es:


int a;
a = 5;
printf("%i", a);

Esto escribirá el valor de la variable entera a en la pantalla, es decir, 5. Fíjese en que el


primer argumento de printf() es una cadena (y, por lo tanto, se escribe entre comillas)
cuyo contenido es el código del tipo de dato que se pretende escribir. El segundo
argumento es el dato mismo.

En una sola instrucción printf() pueden escribirse varios datos. Por ejemplo:
int a;
float x;
a = 5;
x = 10.33;
printf("%i%f", a, x);

Observe detenidamente la cadena de formato: primero aparece “%i” y luego “ %f”.


Esto indica que el primer dato que debe imprimirse es un entero, y el segundo, un real.
Después, aparecen esos datos separados por comas y exactamente en el mismo orden
que en la cadena de formato: primero a (la variable entera) y luego x (la variable real).
El resultado será que en la pantalla se escribirán los números 5 y 10.33.
Los códigos de formato que se pueden utilizar en printf() son:

Código Formato
%d Un entero
%i Un entero
%c Una carácter

Facultad de Informática UPONIC


Entradas y Salidas del Lenguaje C

%s Una cadena
%f Un real
%ld Entero largo
%u Decimal sin signo
%lf Doble posición
%h Entero corto
%o Octal
%x Hexadecimal
%e Notación Científica
%p Puntero
%% Imprime Porcentaje

Hay códigos que admiten modificadores. Por ejemplo:


• Los códigos numéricos “%i”, “%d”, “%u” (para números enteros) y “%f”, “%e” y
“%g” (para números reales), permiten insertar modificadores de longitud “l” (longitud
doble) y “h” (longitud corta). Así, por ejemplo, “%ld” indica que se va a imprimir un
entero de longitud doble (long int); “%hu” sirve para enteros cortos sin signo (unsigned
short int); “%lf” indica que se imprimirá un número real de longitud doble (double),
etc.
• El código “%f” (números reales) se pueden usar con un modificador de
posiciones decimales que se desean mostrar. Por ejemplo, con “%10.4f” obli gamos a
que se impriman diez dígitos a la izquierda de la coma decimal y cuatro a la derecha. La
escritura se ajusta a la derecha. Para ajustarla a la izquierda se utiliza el modificador “ -
”, de esta forma: “%-10.4f”
• El código “%s” (cadenas de caracteres) se puede combinar con un especificador
de longitud máxima y mínima de la cadena. Por ejemplo, “%4.8s” escribe una cadena
de al menos cuatro caracteres y no más de ocho. Si la cadena tiene más, se pierden los
que excedan de ocho. También se puede utilizar el modificador “-” para alinear el texto
a la izquierda.

Además de los códigos de formato, en la cadena de formato puede aparecer cualquier


texto entremezclado con los códigos. A la hora de escribir en la pantalla, los códigos
serán sustituidos por los datos correspondientes, pero el resto del texto aparecerá de
forma literal. Por ejemplo:
int a;
float x;
a = 5;
x = 10.33;
printf("El número entero es %i y el real es %f", a, x);

Lo que aparecerá en la pantalla al ejecutar este fragmento de código será:


El número entero es 5 y el real es 10.33

Una última observación sobre printf(). Hay ciertos caracteres que no son directamente
imprimibles desde el teclado. Uno de ellos es el salto de línea. Para poder ordenar a

Facultad de Informática UPONIC


Entradas y Salidas del Lenguaje C

printf() que escriba un salto de línea (o cu alquier otro carácter no imprimible) se


utilizan los códigos de barra invertida, que con códigos especiales precedidos del
carácter “\”.

En concreto, el carácter “salto de línea” se indica con el código “ \n”. Observe las
diferencias entre estos dos bloques de instrucciones para intentar comprender la
importancia del salto de línea:
int a;
a = 5;
printf("La variable a vale %i", a);
a = 14;
printf("La variable a vale %i", a);

El resultado en la pantalla de la ejecución de estas instrucciones es:


La variable a vale 5La variable a vale 14

Veamos el mismo ejemplo usando el código del salto de línea ( \n):


int a;
a = 5;
printf("La variable a vale %i\n", a);
a = 14;
printf("La variable a vale %i", a);

El resultado en la pantalla será:


La variable a vale 5
La variable a vale 14

Entrada de datos con formato: la función scanf()


La función scanf() es, en muchos sentidos, la inversa de printf(). Puede leer desde el
dispositivo de entrada estándar (normalmente el teclado) datos de cualquier tipo de
los manejados por el compilador, convirtiéndolos al formato interno apropiado.
Funciona de manera análoga a printf(), por lo que su sintaxis es:
scanf(cadena_de_formato, datos);

El prototipo de scanf() se encuentra en el archivo de cabecera stdio.h (de “std” =


standard e “io” = input/output, es decir, entrada/salida)

La cadena_de_formato tiene la misma composición que la de printf(). Los datos son las
variables donde se desea almacenar el dato o datos leidos desde el teclado. ¡Cuidado!
Con los tipos simples, es necesario utilizar el operador & delante del nombre de la
variable, porque esa variable se pasa por referencia a scanf() para que ésta pueda
modificarla.

Por ejemplo:
int a, b;
float x;
scanf("%d", &a);
scanf("%d%f", &b, &x);

Facultad de Informática UPONIC


Entradas y Salidas del Lenguaje C

La primera llamada a scanf() sirve para leer un número entero desde teclado y
almacenarlo en la variable a. La segunda llamada lee dos números: el primero, entero,
que se almacena en b; y, el segundo, real, que se almacena en x.
La función scanf() tiene alguna otra funcionalidad añadida para el manejo de cadenas
de caracteres que por ahora no vamos a discutir, para no agobiar.

Ejemplo de uso de scanf() y printf()


Debido a la relativa complejidad de estas funciones de entrada y salida, vamos a
presentar un pequeño ejemplo de traducción de pseudocódigo a C. Se trata de un
algoritmo que lee dos números enteros, A y B. Si A es mayor que B los resta, y en otro
caso los suma.

En pseudocódigo:
algoritmo suma_y_resta
variables
a y b son enteros
inicio
escribir ("Introduzca dos números enteros")
leer(a, b)
si (a < b) entonces
escribir("La suma de a y b es:", a+b)
si_no
escribir("La resta de a menos b es:", a–b)
fin

En lenguaje C:
/* Programa suma y resta */
#include <stdio.h>
int main()
{
int a, b;
printf ("Introduzca dos números enteros\n");
scanf("%d%d", &a, &b);
if (a < b)
printf("La suma de %d y %d es: %d", a, b, a+b);
else
printf("La resta de %d menos %d es: %d", a, b, a–b);
return 0;
}

Facultad de Informática UPONIC


Entradas y Salidas del Lenguaje C

FUNCIONES DE ENTRADA Y SALIDA (p uts y gets)

Función gets
Lee una cadena de carácter introducido por el teclado. Se puede introducir caracteres
hasta que se de un retorno de carro, (enter); el cual no es parte de la ca dena; en su
lugar se coloca un terminador nulo \0.
Sintaxis:
char *gets(char *s);

Lee una cadena desde stdin.

gets lee una cadena de caracteres terminada con un retorno de línea desde la entrada
estándar y la almacena en s. El carácter de retorno de línea es reemplazado con el
carácter nulo en s.

Observa que la manera en que hacemos referencia a una cadena dentro de la función
es char *, el operador * indica que debemos pasar como argumento la dirección de
memoria donde estará almacenada la cadena a leer. Veremos la explicación en el
capítulo de punteros, baste decir que a nivel del compilador char *cad y char cad[], son
equivalentes, o casi.

gets permite la entrada de caracteres que indican huecos, como los espacios y los
tabuladores. gets deja de leer después de haber leído un carácter de retorno de línea;
todo aquello leído será copiado en s, incluido en carácter de retorno de línea.
Esta función no comprueba la longitud de la cadena leída. Si la cadena de entrada no
es lo suficientemente larga, los datos pueden ser sobrescritos o corrompidos. Más
adelante veremos que la función fgets proporciona mayor control sobre las cadenas de
entrada.

Valor de retorno:

Si tiene éxito, gets devuelve la cadena s, si se encuentra el fin_de_fichero o se produce


un error, devuelve tNULL. Ejemplo:
char cad[80];
do {
gets(cad);
} while (cad[0] != '\000');

En este ejemplo, el programa permanecerá leyendo cadenas desde el teclado mientras


no introduzcamos una cadena vacía. Para comprobar que una cadena está vacía basta
con verificar que el primer carácter de la cadena es un carácter nulo.

Función puts
Imprime en pantalla, el argumento guardado en la variable que se manda a impresión.
Sintaxis:
int puts(const char *s);

Facultad de Informática UPONIC


Entradas y Salidas del Lenguaje C

Envía una cadena a stdout.


puts envía la cadena s terminada con nulo a la salida estándar stdout y le añade el
carácter de retorno de línea.

Valor de retorno:
Si tiene éxito, puts devuelve un valor mayor o igual a cero. En caso contrario devolverá
el valor EOF.

Ejemplo:
char cad[80];
int i;
do {
gets(cad);
for(i = 0; cad[i]; i++)
if(cad[i] == ' ') cad[i] = '_';
puts(cad);
} while (cad[0] != '\000');

Empezamos a llegar a ejemplos más elaborados. Este ejemplo leerá cadenas en "cad",
mientras no introduzcamos una cadena vacía. Cada cadena será recorrida carácter a
carácter y los espacios de sustituirán por caracteres '_'. Finalmente se visualizará la
cadena resultante.

Llamo tu atención ahora sobre la condición en el bucle for, comparándola con la del
bucle do while. Efectivamente son equivalentes, al menos para i == 0, la condición del
bucle do while podría haberse escrito simplemente como while (cad[0]). De hecho, a
partir de ahora intentaremos usar expresiones más simples.

Facultad de Informática UPONIC

You might also like