UTNianos

Versión completa: Duda con un codigo en C++
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola! Tengo un problema con un codigo simple, la idea seria capturar un numero por teclado, e inmediatamente despues, capturar una linea de texto por teclado. El tema es que cuando ingreso el numero, es como si saltea el comando de capturar la linea de texto, y sigue con el resto del codigo. No se si se entiende bien lo que planteo, no tengo tanto lenguaje tecnico para explicar las cosas jaja. El primer cin.get lo puse para ver si es que el comando funcionaba bien, y funciona genial si antes no ingreso un numero. Ya le di mil vueltas y no entiendo porque pasa, si me darian una mano estaria re mil re agradecida.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{

int numero;
char frase1 [50];
char frase2 [50];

cin.get (frase1, 50);
cin >> numero;
cin.get (frase2, 50);

cout << "El numero es " << numero << ", la primera frase es '" << frase1 << "' y la segunda frase es " << frase2 << endl;

system("PAUSE");
return EXIT_SUCCESS;
}
Probá poniendo cin.ignore(); después de cin>>numero;

Es un tema de cómo C++ maneja los flujos de entrada y salida, y deja "colgado" un caracter '\n' al final del buffer, y como cin.get() lee hasta que encuentra un '\n', el primer carácter que encuentra es ese, considera que ya escribiste la línea y sigue como si nada.

Si te manejás con el inglés, podés ver este artículo al respecto: http://www.cplusplus.com/forum/articles/6046/
La diferencia esta en que el operador ">>" es para extraer la entrada formateandola, y el get, es para entradas sin formato.
Como dijo God, es por temas de flojo...

Sin embargo, podes optar (si estas aprendiendo c) en usar un solo grupo de metodos para trabajar y no mixarlos para ahorrarte estos problemas.

o usas solo los ">>" o usas solo los metodos que son sin formato, tene en cuenta que si usas el get, o el getline, te vas a encontrar con situaciones donde vas a tener que transformar por ejemplo:
char * buff = "12";
en
int numero = 12;

para lograr estas cosas, tenes un grupo de funciones en las librerias de C, como por ejemplo
itoa (integer to ascii)
atoi (ascii to integer)

o por ejemplo, para formatear la salida a la hora de imprimir en pantalla, podes usar el


sprintf("12","%d",numero); //Te lo convierte a base decimal
sprintf("12","%x",numero) //Te lo convierte a base hexadecimal
sprintf("12","%o",numero) //Te lo convierte a base octal, dicen las malas lenguas que cada vez que se usa el "%o" muere un niño de tristeza



C tiene la particularidad, que podes hacer lo mismo de 3 millones de forma diferente... Esta bueno conocer 2 o 3...

PD:

Cuando vas a tirar codigo en el foro, usa los tags para Codigo...

SI le borras el guion bajo vas a ver que podes tirar codigo ahi dentro y te lo deja bonito como el que puse.
[_code=c][_/code]

Tambien lo podes hacer con el mouse dandole click en el combo que esta entre el icono de funciones y el televisor para agregar videos...

Lo que esta bueno, es que viene con un compilador, que te permite probar el codigo directo desde el foro, fijate que dice alado de una tuerca y una flecha, "Compilar y ejecutar código"

Abrazo
URLs de referencia