DMarlon Studio

Lección 5 · 5 de 20

Leer del teclado · C++

Pida datos al usuario en C++ con std::cin y >> para números y palabras, y con std::getline para líneas completas con espacios.

C++ · Leer del teclado en DMarlon Studio: el código del ejemplo y su salida en la terminal

`std::cin` es la entrada del teclado, la pareja de std::cout. Con `>>` lee una palabra y la convierte al tipo de la variable: std::cin >> tickets guarda un int y std::cin >> price, un double.

>> se detiene en el primer espacio, así que para un nombre completo se usa `std::getline(std::cin, name)`, que lee la línea entera con sus espacios.

En este ejemplo las respuestas salen del archivo input.txt, como si alguien las tecleara, y por eso no aparecen en la salida: se ve cada pregunta y, en la línea siguiente, la respuesta del programa. En la consola de DMarlon Studio (F9) puede escribirlas usted mismo.

Cuidado al mezclar los dos: después de std::cin >> price queda pendiente el Intro de esa línea, y un getline leería una línea vacía. `std::cin >> std::ws` salta los espacios y saltos de línea pendientes antes de leer el título de la película.

>> también se encadena: std::cin >> row >> seat lee dos números escritos en la misma línea, separados por un espacio.

Código · main.cpp

#include <iostream>#include <string>int main() {    std::string name;    std::cout << "What is your name? ";    // getline reads the whole line, spaces included.    std::getline(std::cin, name);    std::cout << "\nHello, " << name << "!\n";    int tickets;    double price;    std::cout << "How many tickets? ";    // >> reads one word and converts it to the type of the variable.    std::cin >> tickets;    std::cout << "\nPrice per ticket? ";    std::cin >> price;    std::cout << "\n" << tickets << " tickets cost " << tickets * price << " euros\n";    // After >>, the Enter key is still waiting: std::ws skips it.    std::string film;    std::cout << "Which film? ";    std::getline(std::cin >> std::ws, film);    std::cout << "\nEnjoy " << film << ", " << name << "!\n";    // Several values on one line: >> skips the spaces between them.    int row, seat;    std::cout << "Row and seat? ";    std::cin >> row >> seat;    std::cout << "\nYour seat: row " << row << ", seat " << seat << '\n';    return 0;}

Entrada (lo que se teclea) · input.txt

Ana Garcia
3
8.50
The Lord of the Rings
7 12

Salida · c++ -std=c++17 main.cpp -o main && ./main

What is your name? 
Hello, Ana Garcia!
How many tickets? 
Price per ticket? 
3 tickets cost 25.5 euros
Which film? 
Enjoy The Lord of the Rings, Ana Garcia!
Row and seat? 
Your seat: row 7, seat 12

Para recordar

  • std::cin >> x lee una palabra y la convierte al tipo de x.
  • std::getline(std::cin, s) lee una línea completa.
  • Tras >>, use std::cin >> std::ws antes de getline.
  • std::cin >> a >> b lee varios valores seguidos.

Ejercicio

Pregunte también cuántas raciones de palomitas quiere (a 4.50 euros cada una) y escriba el total de entradas y palomitas. Añada la respuesta al final de input.txt.