Curso de C++

Aprende C++ de una buena vez

gratis
texto

Antes de comenzar...

Entrada y salida de datos en C++. Uso de cin, cout, scanf y printf

La entrada y salida de datos en C++ es simple (al menos para los casos más comunes). Con esto hago una comparación entre C++ y Java, pues leer una entrada del usuario por teclado en C++ es bastante simple mientras que en Java implica una serie de conceptos adicionales que la hacen un tanto más complicada. Por suerte para nosotros en esta sección veremos cómo leer por teclado en C++, en otras palabras, asignar a una variable el valor que el usuario escriba por el teclado. Adicional a esto veremos también cómo mostrar texto por pantalla en C++, es decir, salida de datos.

Vamos a comenzar primero con aprender a mostrar texto por pantalla en C++. Este orden se debe a que cuando queremos pedirle algún dato al usuario primero debemos hacerle saber lo que queremos que ingrese y para hacérselo saber debemos mostrarle un mensaje con las indicaciones, por tal motivo es importante primero saber mostrar texto en pantalla en C++ y luego a leer texto por teclado en C++.

Salida de texto por pantalla en C++

Mostrar texto por pantalla en C++ es muy simple. Para imprimir una salida de texto en C++ se hace uso de la instrucción cout, junto con <<. Es importante tener en cuenta que la instrucción cout siempre va acompañada de << para controlar el flujo de datos que sale. No te fijes mucho en ellos, solo ten siempre presente que cout viene acompañado de << para tener cout << como resultado.

Veamos algunos ejemplos para mostrar texto por pantalla en C++:

Ejemplo 1 de impresión de texto por pantalla en C++, usando cout

#include "iostream" using namespace std; int main() { //Se muestra un mensaje por pantalla. cout << "Hola Mundo" << " Desde ProgramarYa." << "\n"; return 0; }

El ejemplo que acabas de ver es bastante sencillo, excepto por un detalle. Si ejecutar este código en tu pantalla aparecerá un mensaje diciendo "Hola Mundo Desde ProgramarYa.". Tal como habrás notado el operador "<<" se usa para concatenar (unir) dos cadenas de texto por eso el resultado es el obtenido. Luego se usa "\n" lo cual crea un salto de línea. No es obligatorio pero es recomendable.

Ejemplo 2 de impresión de texto por pantalla en C++, usando cout

#include "iostream" #include "string" using namespace std; int main() { //El valor de esta variable se mostrará en pantalla string salida1 = "Ejemplo de salida"; //Este valor también se mostrará en pantalla. int numero = 2; //Estos valores se concatenarán en una única salida string salida2 = "Desde ProgramarYa."; //Se concatenan y muestran los valores por pantalla con cout<< cout << salida1 << " " << numero << ". " << salida2 << "\n"; return 0; }

En este ejemplo de salida por pantalla hemos visto que también es posible usar la instrucción cout para mostrar en pantalla el valor de las variables así sean numéricas o cadenas de texto. También vimos que podemos concatenar los valores de esas variables entre sí y también concatenarlas con otros valores directamente (espacios, puntos, símbolos, etc.).

Ahora, veamos los mismos ejemplos, pero usando la función printf de C++, la cual también es útil para imprimir valores por pantalla

Ejemplo 1 de impresión de texto por pantalla en C++, usando printf

#include "iostream" using namespace std; int main() { //Se muestra un mensaje por pantalla. printf("Hola Mundo"); printf(" Desde ProgramarYa."); printf("\n"); //Alternativamente printf("Hola Mundo Desde ProgramarYa.\n"); return 0; }

Como puedes ver, al ejecutar el código, el resultado sería el mismo del ejemplo de cout: "Hola Mundo Desde ProgramarYa", con su respectivo salto de línea al final. Sin embargo, el código es bastante diferente, pues printf no nos permite concatenar valores directamente en un solo llamado, así que debemos hacer llamadas sucesivas para imprimir cada parte del mensaje. Por supuesto, podrías simplemente hacer un solo llamado a printf con el mensaje completo y sería mucho más sencillo.

Adicionalmente, los llamados a printf requieren que los valores estén al interior de los paréntesis (), pues printf es más una función que una instrucción propia de C++.

Es cuestión de gustos, pero siempre me ha parecido que cout simplifica bastante las cosas. Veamos ahora el segundo ejemplo usando printf, porque la cosa se complica:

Ejemplo 2 de impresión de texto por pantalla en C++, usando printf

#include "iostream" #include "string" using namespace std; int main() { string salida1 = "Ejemplo de salida"; //El valor de esta variable se mostrará en pantalla int numero = 2; //Este valor también se mostrará en pantalla. string salida2 = "Desde ProgramarYa."; //Estos valores se concatenarán en una única salida //Se concatenan y muestran los valores por pantalla con parámetros de printf printf("%s %d. %s \n", salida1.c_str(), numero, salida2.c_str()); return 0; }

En este ejemplo usando printf, puedes ver que inicialmente todo es igual, pero al momento de imprimir, todo cambia. Cuando nec esitas pasar valores a printf, lo haces con un "%" seguido de una letra. En el caso de un string se usa s (%s) y en el caso de un número, se usa d (%d). Y luego, se pasa como una serie de argumentos, cada uno de los valores a usar en ese mismo orden.

Ahora bien, la cosa es aún más compleja en el caso de string, porque printf no soporta el uso de string, así que debemos pasar es un apuntador a una seria de char. Por suerte, eso se consigue llamando a la función "c_str()" propia de string.

Ya tenemos claro cómo mostrar texto por pantalla en C++ ahora haremos uso de este concepto y veremos cómo leer texto por teclado en C++. Veamos:

Entrada o lectura de datos en C++

Tal como mencioné hace un momento, la lectura de datos en C++ es bastante simple. Leer datos por teclado en C++ se hace usando el comando cin >> es importante notar el uso de los dos signos >> que son usados para controlar el flujo de datos. No te preocupes mucho por ellos, solo ten en cuenta que cada vez que vaya a usar la instrucción cin debes agregarle >> para quedar con un cin>>. Una manera muy sencilla de recordar esta instrucción es que in significa entrar y como estamos programando en C++ le añadimos la letra C al comienzo quedando así cin>> (sin olvidar los >>).

Veamos unos ejemplos simples para leer datos en C++. Recuerda como dije más arriba que lo ideal para leer datos es indicarle al usuario qué es lo que esperamos que ingrese por lo que en estos ejemplos usaremos también lo recién aprendido (mostrar texto por pantalla).

Ejemplo 1 de lectura de datos en C++, usando cin

#include "iostream" #include "string" using namespace std; int main() { cout << "Hola! Este es un ejemplo en C++" << "\n" << "Por favor ingrese su nombre:" << "\n"; //La instrucción \n es un salto de línea Mostrando los textos separados string nombre;//En esta variable estará almacenado el nombre ingresado. cin >> nombre; //Se lee el nombre cout << "Bienvenido al sistema " << nombre << ". Gracias por usar nuestra aplicación" << "\n"; return 0; }

En este ejemplo hemos hecho un pequeño sistema de bienvenida personalizado para el usuario leyendo el valor por teclado de su nombre. En el comando cin>> se debe poner, después de >>, el nombre de la variable en la cual se almacenará el valor que el usuario ingrese. Por tal motivo primero se declaró una variable llamada nombre y luego se usó cin >> nombre indicando que lo que el usuario ingrese se almacenará en dicha variable.

Ejemplo 2 de lectura de datos en C++, usando cin

#include "iostream" #include "string" using namespace std; int main() { //Mensaje de bienvenida cout << "Hola! Aqui podras realizar sumas" << "\n"; //Se declaran los números que se sumarán (pueden ser decimales) float numero1, numero2; //Se pide el primer numero cout << "Por favor ingrese el primer valor: " << "\n"; //Se asigna el primer valor a numero1 cin >> numero1; //Se pide el segundo numero cout << "Por favor ingrese el segundo valor: " << "\n"; //Se asigna el segundo valor a numero2 cin >> numero2; //Se muestra el resultado. cout << numero1 << " + " << numero2 << " = " << numero1 + numero2; return 0; }

Acá tienes un caso similar al anterior, pero en esta ocasión se están solicitando números y luego realizando operaciones matemáticas con ellos.

Vamos ahora a hablar un poco del uso de scanf para leer valores y algunas dificultades que esto presenta.

Uso de scanf para leer valores y cadenas de texto (string) en C++

El operador scanf al igual que printf fueron ideados para el lenguaje C (no para C++), por lo cual su uso es más primitivo y, en cierto modo, complejo. Leer datos con scanf implica comprender un poco el concepto de punteros y particularmente en el caso de string (que es una librería de C++) se complica aún más, pues debemos convertir ese string en un array definido de caracteres (char).

Vamos a ver un único ejemplo sobre el uso de scanf y string en C++ para quedar claros acerca de estas dificultades

#include "string" using namespace std; int main() { char temporal[100]; printf("Tu nombre?\n"); scanf("%100s", temporal); string nombre = temporal; printf("Te doy la bienvenida %s", nombre.c_str()); return 0; }

Como puedes ver, necesitamos seguir usando la sintaxis tipo "%s" para leer una serie de caracteres, pero en esta ocasión debimos además especificar el tamaño del mismo (100). Adicionalmente, en los siguientes argumentos de scanf, pasamos entonces el nombre de la variable a la cual asignar el valor ingresado por el usuario

Ahora, es un código un tanto curioso. Y siendo sincero, el uso de string es completamente innecesario en ese código (por desgracia). Tanto scanf como printf nos obligan a usar tipos muy primitivos, como char, así que si queremos usar string es poco lo que podemos hacer, pues aunque en nuestro código finalmente hemos usado string, en realidad se trata de un array de 100 caracteres (char) disfrazado.

El código funciona y te permitirá entonces leer valores por medio de scanf y asignarlos a una variable. Esto funciona muy bien con números, pero con string o básicamente en este caso un array de caracteres, debemos lidiar con tamaños constantes (como el 100 que tenemos allí).

Algunas recomendaciones y comentarios al leer y escribir datos en C++

  • Primero que todo, aunque los puedes usar, no recomiendo para nada el uso de scanf y printf, pues complican demasiado el código y pierdes mucha flexibilidad. En realidad, tanto scanf como printf son de C y no de C++, así que deberías usar siempre cout y cin en lugar de printf y scanf (respectivamente), no tienes razones para complicarte la vida sin necesidad.
  • Finalmente, recuerda siempre que cin va acompañado de ">>", mientras que cout usa "<<" (notar que van en sentido contrario). EN realidad, cin dirige el flujo de dastos hacia la variable (por ello va a la derecha ">>"), mientras que cout lo dirige hacia la salida del sistema (por eso va hacia la izquierda "<<".
  • Una vez más, el uso de printf y scanf no es recomendable, porque además de ser bastante más complejos, pueden incluso acarrear a problemas de seguridad en tus programas. La complejidad de estas librerías es simplemente innecesaria en los tiempos actuales.

Muy bien eso ha sido todo en este contenido. Espero que te haya sido de muchísima utilidad. Si has comprendido todo a la perfección y no tienes problemas ni dudas, puedes continuar con la sección de Condicionales en C++ o si ya sabes condicionales puedes seguir con Ciclos en C++. Por otro lado si tienes algún problema, duda, comentario y/o sugerencia la atenderé con gusto si la publicas en la sección de comentarios. Nos leemos.

La última actualización de este artículo fue hace 3 meses

Imagen descriptiva de JuanDMeGon

Juan David Meza González

JuanDMeGon

Magister, Ingeniero, Desarrollador
Web & Instructor

Lo que dicen los estudiantes

Buena didáctica y redacción, espero más contenidos en los siguientes capítulos.

Juan Razo Ruiz

Estudiante del curso " La Guía del Principiante en Java: Fundamentos y Objetos"

Muy buena presentación pedagógica, pues nos quita el miedo a la programación. Yo entiendo que ésta tiene como objetivo facilitar el manejo de procesos que serían, demasiado complejos.

Jairo Ibarbo

Visitante de ProgramarYa.com

Wuau, entendí más en una hora leyendo esto que en todo el semestre con la maestra de informática.

Valeria Sybelle

Visitante de ProgramarYa.com

Muy detallado y claras las explicaciones. Muchas gracias!

Sr. Erick Evencio

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Muy buen programador, dominas la POO como en ninguno otro curso, el uso de traits en el proyecto es una delicia.

Sergio Larracoechea

Estudiante del curso "APIs RESTful con Laravel"

Buenas explicaciones y temario interesante.

Leonardo Quimpos

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Genial el ambiente que genera la pagina. Simple, rápido, fácil y al alcance de cualquiera.¡Sigan así cracks!

Fran Garassi

Visitante de ProgramarYa.com

Muchas gracias me has ayudado a quitar mis dudas de qué es For While, if y switch. Esto me ayudara también a mi tarea.

Len Garcia

Visitante de ProgramarYa.com

Hice muchos ejercicios y aquí logré comprender lo que realmente estaba haciendo. Llegó un momento en que dejó de gustarme la programación, pero con estos textos, recuperé la motivación. Buen trabajo.

Demetrio Cumplido

Visitante de ProgramarYa.com

El curso es bueno, pero siempre explica demasiado rápido

E-Contact

Estudiante del curso " Aprende Laravel: Crea un Gestor de Fotos con Laravel y PHP"

Habiendo visto el 100% del curso puedo decir que es muy bueno de acuerdo a lo propuesto, cumple con las expectativas.

Holmans Correa

Estudiante del curso " La Guía del Principiante en Java: Fundamentos y Objetos"

Demoramos mucho para llegar al desarrollo. Aunque la maquina virtual es necesaria son muchos videos. De ahí en fuera está muy bien

Benjamin Ortiz

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Estuve un semestre sin programar y me siento bastante perdida. Espero que este curso me ayude a ponerme de nuevo al corriente.

Fernanda Sanchez

Visitante de ProgramarYa.com

Muy bien explicado. Contenido muy actualizado.

Santiago Zuluaga

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Me parece muy bueno, el punto de la historia me gusto mucho, ya que a veces aprendemos algo y no sabemos sus origenes. FELICITACIONES hermano...

Anthony Castillo

Visitante de ProgramarYa.com

¡De lo mejor! Saludos desde México, está super bien todo, claro y preciso. Lo mejor es que se usen ejemplos. ¡Mejor que algunos profesores que me han tocado!

Rodrigo Enciso

Visitante de ProgramarYa.com

Estoy muy contento por haber terminado este curso. Estoy aplicando lo aprendido a mis proyectos y quedo totalmente satisfecho. Un curso 100% recomendable.

Jesus Romero

Estudiante del curso "VPS Seguro con DigitalOcean, Nginx, Letsencrypt Ubuntu 14.04"

¡Listo!

En breve recibirás un mensaje de confirmación. Verifica, por si acaso, la carpeta de correo no deseado.

¡Ups! {{subscriberErrorMessage}}

Si te parece bien, te enviaré, de vez en cuando, mensajes de interés sobre los temas que se tratan en sitio.

Tu dirección de correo electrónico será almacenada con un interés según el artículo en el que te encontrabas.

Además, puedes eliminar tu suscripción en cualquier momento.