Introducción
En C no existe ninguna palabra clave para realizar la
entrada y salida de datos (E/S). Se realizan a través de funciones de
biblioteca (concretamente, la biblioteca stdio.h).
Las funciones principales que realizan la entrada y salida
sin formato son:getchar(): Lee un carácter del teclado. Espera hasta que se
pulsa una tecla y entonces devuelve su valor.
Funciones Básicas de Entrada Y Salida
La
E/S por consola se refiere a todas las operaciones que se producen en el teclado y
la pantalla de la computadora. A continuación comentaremos algunas funciones
básicas de entrada y salida. Los prototipos de las que forman parte del
estándar ANSI C se encuentran
dentro de la librería stdio.h.
Definida dentro
de ANSI C.
El
prototipo de printf es: int printf(const char *formato, listaDeArgumentos);
Como
verán, printf devuelve un número entero. Este representa el número de
caracteres escritos. Cualquier número negativo indica que ocurrió un error.
Esta
función escribe en el flujo estándar de salida stdout (o sea, por pantalla )
los argumentos que componen “listaDeArgumentos” según las especificaciones
dadas por la cadena apuntada por “formato”. La cadena “formato”, puede contener
tanto letras como códigos que describen la forma en que se muestran los
argumentos. Existen varios códigos, pero a continuación sólo les comentaré los
más usados:
%c
Se usa para imprimir un caracter
%i
Se usa para imprimir un entero en decimal con signo.
%d
Se usa para imprimir un entero en decimal con signo.
%f
Se usa para imprimir un número en coma flotante (real ).
%x
Se usa para imprimir números hexadecimales.
%o
Se usa para imprimir números en Octal.
%s
Se usa para imprimir una cadena de caracteres.
%e
Se usa para imprimir un número en notación científica.
Para
su información, existen modificadores que pueden especificar con más detalle de
qué forma se quiere que se muestren los datos con la finalidad de poder
ordenarlos. Esto quiere decir que se puede modificar el código (colocando los
modificadores entre el signo % y el carácter de formato) para que muestre por
ejemplo una determinada longitud del campo, cuantas posiciones decimales se
mostrarán o un indicador de ajuste a la izquierda. Por ejemplo, %-10.2f ajusta
un número en coma flotante por la izquierda con dos posiciones decimales en un
campo de diez caracteres. No profundizaremos en este punto.
Ejemplos:
printf(“Hola”);
// Imprime la palabra Hola por pantalla ( sin las comillas ).
printf(“Hola\n”);
// Igual al anterior pero imprime imprime el retorno de carro- Nueva línea
i
= 10;
printf(“Número
entero %i \n”, i); // Imprime “Numero entero 10”
c
= 'x';
printf(“Caracter
%c y número %i\n”, c, i); // Imprime “Caracter x y número 10”
Nuestro Primer programa: El clásico Hola Mundo.
#include<stdio.h>
int main(void) {
printf(“Hola Mundo!\n”);
return
0;
}
Al compilar y ejecutar este programa, lo que
hará es imprimir la frase “Hola Mundo!” por pantalla ( sin las comillas ).
Es la
función de entrada definida por el ANSI C. Esta función se encarga de obtener
un carácter desde el teclado. El problema de esta función es que guarda en un buffer la entrada hasta que se presiona la tecla ENTER (y al hacerlo,
ella tomará sólo el primer carácter del buffer). La razón de esto es que los sistemas UNIX
originales usaban un buffer de línea para entrada por terminal (lo que
quiere decir que había que introducir un
retorno de carro para que lo que se hubiese escrito fuese efectivamente enviado
al computador ). Esta función está en desuso debido a que los programas
modernos requieren cierto grado de interactividad y el hecho de tener que
esperar a enviar un ENTER para procesar suele ser desconcertante. Aun así, siempre es incluida en los compiladores por razones de portabilidad.
Existe una función no ANSI más conveniente a la hora de esperar un carácter por
teclado que está incluida en la librería de Turbo C conio.h que veremos
más adelante.
El prototipo del getchar() es: int
getchar(void);
Un ejemplo de su uso:
char ch;
ch = getchar();
No es ANSI C sino que está definida dentro
de una librería de Borland (quien desarrollo Turbo C, Turbo C++ y Borland C++)
llamada conio.h. Espera a que el usuario presione una tecla por teclado y esta
función lee el carácter presionado sin necesidad de esperar el ENTER y el “eco”
de la misma es presentado por pantalla.
El prototipo del getche() es: int getche(void);
Un ejemplo de su uso:
char ch;
ch
= getche(); // Asigna a ch
el caracter presionado por teclado y lo muestra por pantalla.
No es ANSI C sino que está definida
dentro de una librería conio.h. Espera a que el usuario presione una tecla por
teclado y esta función lee el caracter presionado sin necesidad de esperar el
ENTER pero a diferencia del getche(), ésta no muestra el “eco” por pantalla.
El prototipo del getch() es: int getch(void);
Un ejemplo de su uso:
char ch;
ch
= getch(); // Asigna a ch
el caracter presionado por teclado. No muestra nada por pantalla.
Definida dentro
de ANSI C. Imprime un caracter en pantalla en la posición actual del cursor.
El
prototipo de putchar es: int putchar(int c); donde c es el caracter a imprimir.
Esta función devuelve un parámetro ya que el programador podría necesitar
verificar que la función haya sido ejecutada con éxito. Si es cierto, devuelve
el mismo caracter c, de lo contrario devolverá un EOF (Una macro definida en
stdio.h que significa End Of File. Lo veremos más adelante en el curso).
Un ejemplo de su uso:
char ch;
ch
= 'S';
putchar(ch);
// Lo que imprime el caracter 'S' por pantalla.
Definida dentro
de ANSI C.
El
prototipo de scanf es: int scanf(const char *formato, listaDeArgumentos);
Es la
función encargada de leer datos desde el buffer estándar de entrada stdin
(teclado). Puede leer todos los tipos de datos que hayan. Es la función inversa
de printf();
Los
códigos para representar los datos son los mismos que en printf. Por ejemplo:
scanf(“%i”,
&i); // OJO con el signo '&'
Especifica
que se espera del buffer estándar un número entero y éste será almacenado
dentro de la variable i. En realidad el símbolo '&' podría traducirse como:
“en la dirección de memoria que contiene la variable 'i'”. Sobre esto
profundizaremos en punteros. Lo que se está diciendo que se almacene el valor
dentro de una localidad de memoria. Este signo NO puede faltar a menos que
hablemos de cadenas y esto tiene su explicación que lo veremos cuando
estudiemos Cadenas más adelante.
Otra
cosa es que una sólo orden puede ser usada para recibir varios datos al mismo
tiempo. Por ejemplo:
scanf(“%i%c”, &i, &ch);
espera
a que el usuario introduzca algo como “10 a” y luego ENTER por teclado para
almacenar 10 en i y la letra a en ch.
Definida
dentro de conio.h. Esta función cambia el color de las letras que se muestran
por pantalla.
Su
prototipo es: void textcolor(int color);
Donde
color es un número que representa el color deseado. También existen unas MACROS
definidas dentro de conio.h que representan el color. Estos son:
Macro
Equivalente entero
BLACK
0
BLUE
1
GREEN
2
CYAN
3
RED
4
MAGENTA 5
BROWN 6
LIGHTGRAY 7
DARKGRAY 8
LIGHTBLUE 9
LIGHTGREEN 10
LIGHTCYAN 11
LIGHTRED 12
LIGHTMAGENTA 13
YELLOW 14
WHITE
15
BLINK
128
El BLINK es para hacer al cursor parpadeante.
Ejemplo:
textcolor(RED);
hará que todo el texto que se imprima a
continuación aparezca en rojo.
Definida
dentro de conio.h. Esta función cambia el color del fondo de pantalla sobre el
cual se muestran las letras.
Su
prototipo es: void textbackground(int color);
El color
de fondo sólo puede ser de los 8 principales colores así que sólo aplican las 8
primeras MACROS mencionadas en textcolor (de 0 a 7 ).
Ejemplo:
textbackground(RED);
// El color de fondo será Rojo
textcolor(BLUE);
// El color del texto será Azul.
clrscr();
// Borra la pantalla pero debido a que el color de fondo es rojo,
//
toda la pantalla se verá roja.
printf(“Texto\n);
// Imprime la palabra “Texto” en Azul sobre el fondo rojo.
No está definida por el ANSI C. Esta función se encuentra dentro
de la librería conio.h de Borland.
Esta función borra todo el contenido de la
ventana de texto actual. El prototipo de clrscr es: void clrscr(void);
Su forma de uso es:
clrscr();
No
está definida por el ANSI C. Esta función se encuentra dentro de la librería
conio.h de Borland.
El
prototipo de gotoxy es: void gotoxy(int x, int y);
Esta
función coloca al cursor en la posición de pantalla apuntada por las
coordenadas x e y dentro de la pantalla de texto actual. Una pantalla estándar
de DOS contiene 80 columnas por 25 filas. Si las coordenadas no son válidas, no
se hace nada.
Ejemplo:
clrscr();
gotoxy(20,10);
putchar('*');
borra la pantalla, se posiciona en la columna,
fila 10 e imprime el caracter *.
No está definida por el ANSI C. Esta función
se encuentra dentro de la librería conio.h de Borland.
El
prototipo de wherex es: int wherex(void);
Retorna
la columna en la que se encuentra posicionado el cursor relativa a la ventana
de texto actual.
No
está definida por el ANSI C. Esta función se encuentra dentro de la librería
conio.h de Borland.
El
prototipo de wherey es: int wherey(void);
Retorna
la fila en la que se encuentra posicionado el cursor relativa a la ventana de
texto actual.
No está definida por el ANSI C. Esta función se
encuentra dentro de la librería conio.h de Borland.
El
prototipo de window es: void window(int izq, int arr, int der, int aba);
Esta
función se usa para crear una ventana de texto rectangular con coordenadas
superior-izquierda e inferior-derecha dadas por izq,arr y der,aba. Si las
coordenadas no son válidas, no se hace nada.
Es por
esta función que he estado comentando en las funciones anteriores: “dentro de
la pantalla de texto actual” ya que luego de usada esta función, todas las
operaciones como clrscr, cprintf, gotoxy, etc, son relativas a esta nueva
ventana.
Ejemplo:
window(10,
10, 60, 15); // crea una ventana cuyas esquinas son (10,10) y (60,15)
gotoxy(2,
3); // Se coloca en la posición (2,3) dentro de la ventana anterior.
No está definida por el ANSI C. Esta función se
encuentra dentro de la librería conio.h de Borland.
El prototipo de cprintf es: int cprintf(const
char *fmt,...);
Hace lo mismo que printf pero dentro de la
ventana de texto actual.
Siguiendo el mismo ejemplo anterior, si
añadimos:
cprintf(“Punto
(2,3) de la ventana activa\n\r”);
imprimiría dentro de la ventana definida en la
posición dada la frase: “Punto (2,3) de la ventana activa”.
Debe ponerse también \r ya que cprintf no
interpreta el \n como un par \r\n como hace el printf. \r es retorno de carro.
Conclusiones
En C un archivo puede ser cualquier cosa, desde un archivo
de disco a un terminal o una impresora. Se asocia una secuencia con un archivo
específico realizando una operación de apertura, una vez que está abierto, la
información puede ser intercambiada entre éste y el programa. El puntero a un
archivo es el hilo que unifica el sistema de E/S con buffer. Un puntero a un
archivo es un puntero a una información que define varias cosas sobre él,
incluyendo el nombre, el estado y la posición actual del archivo. En esencia,
el puntero a un archivo identifica un archivo en disco específico y utiliza la
secuencia asociada para dirigir el funcionamiento de las funciones de E/S con
buffer.
No hay comentarios:
Publicar un comentario