Biblioteca C de entrada y salida estándar "stdio.h"

^

En esta biblioteca están las funciones de entrada y salida, tanto de la pantalla y teclado como de ficheros. "stdio" puede y suele leerse como estándar Input/Output. De hecho la pantalla y el teclado son considerados como ficheros, aunque de un tipo algo peculiar. La pantalla es un fichero sólo de escritura llamado stdout, o salida estándar y el teclado sólo de lectura llamado stdin, o entrada estándar.

Se trata de una biblioteca ANSI C, por lo que está heredada de C, y ha perdido la mayor parte de su utilidad al ser desplazada por "iostream". Pero aún puede ser muy útil, es usada por muchos programadores, y la encontrarás en la mayor parte de los programas C y C++.

Veamos ahora algunas funciones.

Función getchar()

Sintaxis:

int getchar(void); 

Lee un carácter desde stdin.

getchar es una macro que devuelve el siguiente carácter del canal de entrada stdin. Esta macro está definida como getc(stdin)".

Valor de retorno:

Si todo va bien, getchar devuelve el carácter leído, después de convertirlo a un int sin signo. Si lee un Fin-de-fichero o hay un error, devuelve EOF.

Ejemplo:

do {
   a = getchar(); 
} while (a != 'q'); 

En este ejemplo, el programa permanecerá leyendo el teclado mientras no pulsemos la tecla 'q'.

Función putchar()

Sintaxis:

int putchar(int c);

Envía un carácter a la salida stdout.

putchar(c) es una macro definida como putc(c, stdout).

Valor de retorno:

Si tiene éxito, putchar devuelve el carácter c. Si hay un error, putchar devuelve EOF.

Ejemplo:

while(a = getchar()) putchar(a);

En este ejemplo, el programa permanecerá leyendo el teclado y escribirá cada tecla que pulsemos, mientras no pulsemos '^C', (CONTROL+C). Observa que la condición en el while no es a == getchar(), sino una asignación. Aquí se aplican, como siempre, las normas en el orden de evaluación en expresiones, primero se llama a la función getchar(), el resultado se asigna a la variable "a", y finalmente se comprueba si el valor de "a" es o no distinto de cero. Si "a" es cero, el bucle termina, si no es así continúa.

Función gets()

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()

Sintaxis:

int puts(const char *s);

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.