Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

Escribe un programa en C que demuestre cómo leer una cadena introducida por el usuario usando scanf y mostrarla de nuevo. Tu programa debe:

  1. Declarar un arreglo de caracteres llamado username con 30 elementos para almacenar la entrada del usuario
  2. Declarar un arreglo de caracteres llamado hobby con 25 elementos para almacenar otra entrada
  3. Usar printf para mostrar al usuario el mensaje Enter your username:
  4. Usar scanf con el especificador de formato %s para leer el nombre de usuario en el arreglo username
  5. Usar printf para mostrar al usuario el mensaje Enter your hobby:
  6. Usar scanf con el especificador de formato %s para leer el pasatiempo en el arreglo hobby
  7. Imprimir ambas cadenas usando printf en 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;
}
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de C online