Entrada y salida de datos II

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;
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.