Menu
Coddy logo textTech

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 cómo obtener la entrada de cadenas de los usuarios. La función scanf puede leer cadenas usando el especificador de formato %s, pero tiene limitaciones importantes que debes entender.

Para leer una cadena con scanf, se utiliza el formato %s y se pasa el nombre del 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 crítica: deja de leer tan pronto como 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 seria es que scanf no comprueba si la entrada cabe en tu array. Si alguien introduce una palabra más larga de lo que tu array puede contener, causará un desbordamiento de búfer, lo que podría bloquear tu programa o crear vulnerabilidades de seguridad. Asegúrate siempre de que tu array de caracteres sea lo suficientemente grande para la entrada esperada.

A pesar de estas limitaciones, scanf("%s", ...) es perfectamente adecuado para leer palabras sueltas, 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 entrada de texto del 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 solicitar al usuario el mensaje "Introduce tu nombre de usuario:"
  4. Usar scanf con el especificador de formato %s para leer el nombre de usuario en el arreglo username
  5. Usar printf para solicitar al usuario el mensaje "Introduce tu pasatiempo:"
  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 entrada de texto, la declaración correcta de arreglos de caracteres con un tamaño suficiente y la combinación de la entrada del usuario con una salida formateada mediante printf.

Pruébalo tú mismo

#include <stdio.h>

int main() {
    // TODO: Declara tus arreglos de caracteres aquí
    
    // TODO: Escribe tu código aquí 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