Entrada de cadenas con scanf
Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 14 de 63.
Ahora que entiendes cómo funcionan las cadenas con el terminador nulo, es hora de aprender a obtener cadenas como entrada de los usuarios. La función scanf puede leer cadenas usando el especificador de formato %s, pero tiene limitaciones importantes que debes comprender.
Para leer una cadena con scanf, usa el formato %s y pasa el nombre de tu arreglo de caracteres (sin el operador &, ya que los nombres de los arreglos ya son direcciones):
char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);Sin embargo, scanf("%s", ...) tiene una limitación importante: deja de leer en cuanto encuentra cualquier carácter de espacio en blanco (espacio, tabulación o salto de línea). Esto significa que, si un usuario escribe "Hello World", scanf solo capturará "Hello" y dejará "World" en el búfer de entrada.
Otra preocupación grave es que scanf no comprueba si la entrada cabe en tu arreglo. Si alguien introduce una palabra más larga de lo que puede contener tu arreglo, se producirá un desbordamiento del búfer, que podría hacer que tu programa se bloquee o crear vulnerabilidades de seguridad. Asegúrate siempre de que tu arreglo de caracteres sea lo suficientemente grande para la entrada esperada.
A pesar de estas limitaciones, scanf("%s", ...) es perfectamente adecuado para leer palabras individuales, que es exactamente lo que practicarás en el próximo desafío.
Desafío
FácilEscribe un programa en C que demuestre cómo leer una cadena introducida por el usuario usando scanf y mostrarla de nuevo. Tu programa debe:
- Declarar un arreglo de caracteres llamado
usernamecon 30 elementos para almacenar la entrada del usuario - Declarar un arreglo de caracteres llamado
hobbycon 25 elementos para almacenar otra entrada - Usar
printfpara mostrar al usuario el mensajeEnter your username: - Usar
scanfcon el especificador de formato%spara leer el nombre de usuario en el arreglousername - Usar
printfpara mostrar al usuario el mensajeEnter your hobby: - Usar
scanfcon el especificador de formato%spara leer el pasatiempo en el arreglohobby - Imprimir ambas cadenas usando
printfen el formato exacto que se muestra a continuación
La entrada se proporcionará como dos palabras individuales separadas (sin espacios dentro de cada palabra).
Tu salida debe mostrar los resultados en el siguiente formato:
Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!Por ejemplo, si el usuario introduce Alice como nombre de usuario y reading como pasatiempo, la salida debe ser:
Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!Este desafío pone a prueba tu comprensión del uso de scanf con el especificador de formato %s para leer una cadena, de la declaración adecuada de arreglos de caracteres con suficiente espacio y de la combinación de la entrada del usuario con una salida formateada usando printf.
Pruébalo tú mismo
#include <stdio.h>
int main() {
// TODO: Declara aquí tus arreglos de caracteres
// TODO: Escribe aquí tu código para solicitar y leer la entrada
// TODO: Imprime el mensaje de salida final
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenasPractica por tu cuenta: Compilador de C online