Vamos a centrarnos en cómo hacer que nuestro programa lea un carácter de un usuario (generalmente introducido por teclado) y lo escriba en la salida (que será la pantalla del terminal).
getc
La función getc
lee el siguiente carácter de
un flujo de fichero y devuelve el valor numérico de ese carácter (lo
devuelve como entero).
#include <stdio.h> int getc(FILE *stream);
Aquí FILE *stream
es una variable con el
flujo de fichero. Si llega al final del fichero o hay algún error, la
función devuelve EOF
.
No te fijes ahora en el tipo de datos
FILE
, pues por ahora vamos a usar como flujos de ficheros
stdin
y stdout
, que están ya predefinidos.
Por otro lado, EOF
es una constante declarada en el fichero
de cabecera stdio.h
. Generalmente vale -1
,
pero usa mejor EOF
, por si luego usas el programa con otro
compilador u otro sistema operativo que use otro valor distinto.
getchar
La función getchar
es equivalente a la
función getc(stdin)
.
#include <stdio.h> int getchar(void);
Aquí void
indica que no se necesita ningún
argumento para llamar a la función, pues entiende que leeremos el caracter
desde la entrada estándar.
El siguiente programa lee dos caracteres introducidos por el usuario desde el teclado, de las dos formas posibles vistas hasta ahora, y luego los imprime en la pantalla:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> int main(void) { int caracter1; char caracter2; printf("Por favor, teclea dos caracteres seguidos:\n"); caracter1 = getc(stdin); caracter2 = getchar(); printf("El primer caracter que has introducido es: %c\n",caracter1); printf("El segundo caracter que has introducido es: %c\n",caracter2); return 0; } |
Como puedes ver, pese a que las funciones están esperando
un carácter almacenado como entero, la variable caracter2
se
ha declarado de tipo char
y, aún así, el programa no da error
y funciona. Esto es así porque, internamente, las variables de tipo
char
son almacenadas con su correspondencia numérica, de ahí
que puedan pasarse a estas funciones que esperan un tipo
int
.
putc
La función putc
escribe un carácter al flujo
del fichero especificado.
#include <stdio.h> int putc(int c, FILE *stream);
Aquí c
es el carácter, guardado como entero,
y el segundo argumento es el fichero. Si la operación tiene algún error,
devuelve EOF
; si no, devuelve el carácter escrito.
putchar
La función putchar
también se usa para
escribir un carácter en la pantalla. La única diferencia es que no
necesita el segundo argumento, pues usa siempre la salida estándar que
esté predefinida.
#include <stdio.h> int putchar(int c);
El siguiente programa saca por pantalla el carácter 'A' con las dos funciones que acabamos de ver.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main(void) { int caracter1 = 65; /*Suele ser el valor numérico de A*/ char caracter2 = 'A'; printf("La letra con valor numérico de 65 es:\n"); putc(caracter1,stdout); printf("Y la variable caracter2 contiene la letra:\n"); putchar(caracter2); return 0; } |
De la misma manera que ocurría con getc
y
getchar
, aunque putc
y putchar
esperan variables de tipo int
, podemos pasarles variables
declaradas como char
, al ser este tipo de variables
internamente almacenadas con su correspondencia numérica.