Existen diversas formas de recoger información desde teclado en C, dependiendo del tipo de información que queramos recoger.
La instrucción scanf
se emplea para leer datos simples (enteros, reales, caracteres, e incluso palabras), empleando una sintaxis similar a la instrucción printf
. Como primer parámetro, acepta una cadena de texto con el formato del dato a leer. Aquí podemos incluir los mismos símbolos que en printf
para especificar dicho tipo de dato:
%d
para números enteros%f
para números reales%s
para cadenas de texto%c
para caracteresDespués, como segundo parámetro, se indica la variable donde queremos almacenar el dato que leamos. Dicha variable se pasa normalmente por referencia con un &
, salvo que sea un dato complejo (como por ejemplo un array de caracteres).
Veamos algunos ejemplos:
int n;
char palabra[100];
printf("Escribe un número:\n");
scanf("%d", &n);
printf("Escribe ahora una palabra:\n");
scanf("%s", palabra);
Podemos también definir varios símbolos seguidos en la instrucción scanf
y luego tantos parámetros como variables vayamos a recoger. Por ejemplo:
int n1, n2;
float f;
printf("Escribe dos enteros y un real:\n");
scanf("%d %d %f", &n1, &n2, &f);
En este caso, deberíamos introducir los tres datos separados por espacios en el teclado.
Si queremos leer textos, la instrucción scanf
se queda algo corta, ya que sólo nos va a servir para leer palabras sueltas. En este caso, puede ser más recomendable emplear instrucciones como gets
o fgets
. Ambas reciben como parámetro la variable donde almacenar el texto (que en el caso de C es un array de caracteres), y en el caso de fgets
podemos especificar desde dónde lo queremos leer. Así, podríamos leerlo o bien de teclado (empleando el identificador stdin
de entrada estándar) o bien de un fichero de texto.
Por ejemplo:
// Suponemos un nombre completo inferior a 100 caracteres
char nombreCompleto[100];
printf("Dime tu nombre completo:\n");
gets(nombreCompleto);
// Otra alternativa: indicamos variable, tamaño máximo y desde dónde leer
fgets(nombreCompleto, 100, stdin);