Hola en este programa no deja escribir el nombre porque pasa directamente al otro codigo quisiera saber porque y cual seria la solucion
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::getline;
using std::string;
int main()
{
int numero1;
int numero2;
double numero3;
string nombre;
cout << "Bienvenido, escriba 1 numero entero\n";
cin >> numero1;
cout << "Bien! ahora escriba un numero con decimales!\n";
cin >> numero3;
cout << "Escriba un numero entero\n";
cin >> numero2;
cout << "Escribe tu nombre y apellido!";
getline(cin, nombre);
cout << "\nBienvenido: " << nombre << endl;
cout << "OK, ingreso los numeros: " <<numero1 << " " << numero3 << " " << numero2;
cout << "hagamos unas cuentas...";
cout << numero3 << "es igual a " << numero1 << " dividido " << numero2 << endl;
numero3 = static_cast <double> (numero1) / numero2;
cout << "tomando enteramente seria: " << numero1 / numero2;
cout << "tomando con static es: " << numero3;
cin.get();
return 0;
}
linia 24, por que el getline? si es un string puedes usar como los otros
cin >> nombre;
Cita de: Stakewinner00 en 19 Febrero 2013, 23:08 PM
linia 24, por que el getline? si es un string puedes usar como los otros
cin >> nombre;
Hola mas que nada es porque es un nombre, getline te permite que el usuario ingrese caracteres con espacios
acaso cin no permite espacios?
Cita de: engelx en 19 Febrero 2013, 23:26 PM
acaso cin no permite espacios?
creo que no, y si lso permite igual quiero saber porq salta el getline XD
limpia el buffer... en c creo que con un getline vacio :P
Cita de: engelx en 19 Febrero 2013, 23:43 PM
limpia el buffer... en c creo que con un getline vacio :P
como es eso? porque si pongo getline(); antes del otro get me da error :(
bueno coloca 2 veces el mismo getline, el primero agarra lo que está en el buffer el segundo los datos que quieres... (sorry tengo tiempo sin usar c, pero eso es algo común en c, j y algunos otros lenguajes)
Cita de: engelx en 19 Febrero 2013, 23:52 PM
bueno coloca 2 veces el mismo getline, el primero agarra lo que está en el buffer el segundo los datos que quieres... (sorry tengo tiempo sin usar c, pero eso es algo común en c, j y algunos otros lenguajes)
Gracias hay andubo :D
Cita de: engelx en 19 Febrero 2013, 23:26 PM
acaso cin no permite espacios?
No, cada vez que pulsas la tecla "espacio" se da la lectura por terminada (como si pulsaras enter).
Por eso hay que usar getline
PD: Repito, no tienes que usar todos esos "using std::". Basta con que pongas uno genérico:
using namespace std;
CitarNo, cada vez que pulsas la tecla "espacio" se da la lectura por terminada (como si pulsaras enter).
Por eso hay que usar getline
ok :P sorry es que tengo tiempo sin ponerme con c
Cita de: amchacon en 20 Febrero 2013, 01:27 AM
PD: Repito, no tienes que usar todos esos "using std::". Basta con que pongas uno genérico:
using namespace std;
cierto! :P
por cierto... no recuerdo si en c... pero si revisas el contenido del primer getline posiblemente verás que contiene el enter que pulsaste anteriormente... recuerdo que me explicaron eso, pero no recuerdo por que...
Cita de: engelx en 20 Febrero 2013, 03:30 AM
ok :P sorry es que tengo tiempo sin ponerme con c
cierto! :P
por cierto... no recuerdo si en c... pero si revisas el contenido del primer getline posiblemente verás que contiene el enter que pulsaste anteriormente... recuerdo que me explicaron eso, pero no recuerdo por que...
si lo se pero me gusta usarlo así porque evito olvidarme cosas XD
una pregunta, por que no cambias esto
using std::cout;
using std::cin;
using std::endl;
por esto
using namespace std;
Cita de: Stakewinner00 en 21 Febrero 2013, 20:12 PM
una pregunta, por que no cambias esto
using std::cout;
using std::cin;
using std::endl;
por esto
using namespace std;
me gusta usarlo asi como esta en el programa, me evita olvidarme cosas jeje :D
a si, ya lo dijiste me despiste.
Bueno, personalmente te recomiendo que uses el más corto y cómodo, y yo tampoco usaría un return 0 al final ya que igualmente sale pero bueno, eso es más comprensible.
Los codigos deben ser lo más corto y simples, sino la gente no los entiende.
Cita de: Stakewinner00 en 21 Febrero 2013, 20:21 PM
yo tampoco usaría un return 0 al final ya que igualmente sale
Bueno el estándar dice que el main debe devolver algo.
Por lo que no viene mal ponerlo (de hecho es recomendable).
ya lo sé, por eso digo que es igual. Pero en lo del using namespace no hay otra.
Cita de: Stakewinner00 en 21 Febrero 2013, 20:12 PMuna pregunta, por que no cambias esto
using std::cout;
using std::cin;
using std::endl;
por esto
using namespace std;
+
Cita de: Stakewinner00 en 21 Febrero 2013, 20:55 PMya lo sé, por eso digo que es igual. Pero en lo del using namespace no hay otra.
En C++ se evita el conflicto de nombres mediante los namespaces. Al utilizar "using namespace::std;"
todo el namespace std se vuelca en el global: lo que quieres y lo que no.
En mi caso prefiero utilizar sentencias "using std::nombre;" por dos razones: 1) como refuerzo al aprender las facilidades cortesía de cada encabezado y 2) porque solo se incluye lo necesario.
Una pagina relacionada (pero en ingles) es: C++ FAQ: [27.5] Should I use using namespace std in my code? (http://www.parashift.com/c++-faq/using-namespace-std.html).
Un saludo
Gracias por la información, la tendré en cuenta cuando alguna variable me falle, pero sigo pensando que para que el codigo sea más simple va bien usar using namespace.
Cita de: 1996marioful en 19 Febrero 2013, 22:53 PM
Hola en este programa no deja escribir el nombre porque pasa directamente al otro codigo quisiera saber porque y cual seria la solucion
Problemas de buffer con \n.Te los "comes" con un while, o su función equivalente en C++:#include <iostream>
#include <cstdio>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::getline;
using std::string;
int main()
{
int numero1;
int numero2;
double numero3;
string nombre;
cout << "Bienvenido, escriba 1 numero entero\n";
cin >> numero1;
cout << "Bien! ahora escriba un numero con decimales!\n";
cin >> numero3;
cout << "Escriba un numero entero\n";
cin >> numero2;
while (getchar ()!='\n');
cout << "Escribe tu nombre y apellido!";
while (getchar ()!='\n');
cout << "\nBienvenido: " << nombre << endl;
cout << "OK, ingreso los numeros: " <<numero1 << " " << numero3 << " " << numero2;
cout << "hagamos unas cuentas...";
cout << numero3 << "es igual a " << numero1 << " dividido " << numero2 << endl;
numero3 = static_cast <double> (numero1) / numero2;
cout << "tomando enteramente seria: " << numero1 / numero2;
cout << "tomando con static es: " << numero3;
cin.get();
return 0;
}
Saluditos!.