Principiante · entrada/salida
Saludar
Todo lo anterior imprimía texto fijo. Ahora la salida depende de lo que teclee el usuario — el momento en que un programa deja de ser un cartel y pasa a ser una herramienta.
En una fraseLee con <code>cin >> name</code> en un array de <code>char</code> y escribe <code>Hello, </code> seguido del nombre y un salto de línea.
El problema
Entrada: Una palabra de 1 a 20 letras latinas, sin espacios.
Salida: Una línea: Hello, NAME! — con coma y signo de exclamación, exactamente así.
Ejemplos:
| Entrada | Salida |
|---|---|
Ada | Hello, Ada! |
Linus | Hello, Linus! |
El juez compara carácter a carácter. Una coma o un ! de menos es respuesta errónea aunque las palabras sean correctas.
Tu solución
Entrada personalizada para «Ejecutar mi entrada»
La corrección corre en tu navegador contra pruebas ocultas. Un bucle infinito se corta a los 3 segundos — aun así, asegúrate de que todo bucle tenga salida. Tu código se guarda solo mientras escribes.
¿Atascado? Pistas
Pista 1 — cin lee dentro de una variable
cin >> name; espera un token separado por espacios y lo guarda. La flecha apunta hacia la variable — no hay que asignar nada después, la lectura es la asignación.
Pista 2 — Tres piezas, una línea
Construye la salida con tres piezas: el literal "Hello, ", la variable name y el literal "!". Encadénalas con << y cierra con endl. Imprimir name sin comillas funciona porque es un array de char, que cout sabe escribir como texto.
Pista 3 — ¿Por qué no int?
Porque un nombre es texto, no un número. En este motor el texto vive en un array de char — std::string no está disponible. Decláralo un poco mayor que la palabra más larga permitida (25 casillas para 20 letras, dejando sitio al cero final).
Solución (¡inténtalo primero!)
#include <iostream>
using namespace std;
int main() {
char name[25];
cin >> name;
cout << "Hello, " << name << "!" << endl;
return 0;
}
Ese es el ciclo completo de entrada/salida: lee un valor, úsalo, escribe un resultado. Todo lo demás en este sitio es este patrón con más aritmética en medio. Siguiente: toma dos números y escribe su suma en Suma de dos números.
Análisis profundo
Por qué funciona
El programa tiene exactamente las tres partes de todo programa: obtener entrada, transformarla (aquí: no), producir salida. cin >> name guarda el token; cout << "Hello, " << name << "!" arma la línea con literales y la variable. No hace falta nada más.
El coste
O(1) de tiempo y espacio — un token leído, una línea escrita, sin importar la longitud dentro del límite.
Dónde falla
- Leer con
cin >> nameen unint— un nombre es texto, necesita un array dechar(o un tipo cadena que este motor no tiene). - Olvidar la puntuación. El juez compara caracteres:
Hello, Adasin el!es respuesta errónea. - Declarar un array demasiado pequeño. Veinte letras más el cero final necesitan al menos 21 casillas; 25 va cómodo.
Siguiente paso
Añade aritmética entre la lectura y la escritura: Suma de dos números.
Dos cosas para recordar
- Tres partes: leer, transformar, escribir. Aquí la transformación está vacía.
cin >> xlee un token separado por espacios — la flecha apunta hacia la variable.
🐞 Esta versión falla: ábrela y pruébala
Imprime el nombre dos veces: falta el literal del saludo
#include <iostream>
using namespace std;
int main() {
char name[25];
cin >> name;
cout << name << name << endl; // bug: no greeting text
return 0;
}