Ya hemos visto anteriormente (lección anterior aquí) que para escribir en la consola usamos std::cout. De forma muy parecida tenemos std::cin para capturar la entrada desde la consola. Prueba un ejemplo:
#include <iostream> #include <string> int main() { int pokNumber = 0; int pokPs = 0; std::string pokemon = ""; std::cout<<"¿Cuántos pokemon tienes? "; std::cin >> pokNumber; std::cout << "No está mal, yo tengo " << pokNumber + 1 << std::endl; std::cout << "¿Cuántos PS tiene tu pokemon más fuerte? "; std::cin >> pokPs; std::cout<<"Está muy bien, mi Pikachu tiene "<< pokPs + 10 << " PS" << std::endl; std::cout<<"¿Cuál es tu pokemon favorito? "; std::cin >> pokemon; std::cout << "Qué casualidad! Mi pokemon favorito también es " << pokemon << std::endl; return 0; }
¿Qué sucede al intentar capturar la entrada del usuario si se introducen dos palabras?
Te invito a que lo pruebes en tu propio programa y veas el resultado.
Podemos comprobar como std::cin no está pensado para capturar cadenas largas o espacios. Para ello tenemos a nuestra disposición una función llamada getline.
Su forma básica de operar es la siguiente: captura caracteres de std::cin y los almacena en la variable asignada. Se realiza esta operación hasta alcanzar una línea nueva o bien el carácter asignado, por defecto ‘\n’. Más info aquí.
#include<iostream> #include<string> int main() { std::string apodo; std::cout<<"¿Cuál es tu apodo?: "; std::getline(std::cin, apodo); std::cout<<"Hey, "<<apodo<<"!\n"; return 0; }
Stringstream
Esta librería resulta muy útil a la hora de manipular cadenas. Stringstream permite la manipulación de variables como si fueran streams de datos.
Para utilizarla debemos incluir la cabecera:
#include <sstream>
Fíjate en el siguiente ejemplo:
#include <string> #include <iostream> #include <sstream> int main () { std::stringstream ss; ss << "pikachu" << ' ' << "bulbasaur"; std::string pika, bulbasaur; ss >> pika >> bulbasaur; std::cout << "pokemon 1: " << foo << '\n'; std::cout << "pokemon 2: " << bar << '\n'; return 0; }