Universidad Carlos III de Madrid

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2012 - Enero 2013

2. Funciones E/S carácter a carácter

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

2.1. La función 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.

Nota

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.

2.2. La función 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.

2.3. La función 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.

2.4. La función 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.