Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: elkiy en 19 Febrero 2013, 22:53 pm



Título: [SOLUCIONADO] me salta el getline
Publicado por: elkiy 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

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::getline;
  8. using std::string;
  9.  
  10. int main()
  11. {
  12. int numero1;
  13. int numero2;
  14. double numero3;
  15. string nombre;
  16.  
  17. cout << "Bienvenido, escriba 1 numero entero\n";
  18. cin >> numero1;
  19. cout << "Bien! ahora escriba un numero con decimales!\n";
  20. cin >> numero3;
  21. cout << "Escriba un numero entero\n";
  22. cin >> numero2;
  23. cout << "Escribe tu nombre y apellido!";
  24. getline(cin, nombre);
  25. cout << "\nBienvenido: " << nombre << endl;
  26. cout << "OK, ingreso los numeros: " <<numero1 << " " << numero3 << " " << numero2;
  27. cout << "hagamos unas cuentas...";
  28. cout << numero3 << "es igual a " << numero1 << " dividido " << numero2 << endl;
  29. numero3 = static_cast <double> (numero1) / numero2;
  30. cout << "tomando enteramente seria: " << numero1 / numero2;
  31. cout << "tomando con static es: " << numero3;
  32. cin.get();
  33. return 0;
  34. }
  35.  
  36.  


Título: Re: me salta el getline
Publicado por: 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;


Título: Re: me salta el getline
Publicado por: elkiy en 19 Febrero 2013, 23:18 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


Título: Re: me salta el getline
Publicado por: engel lex en 19 Febrero 2013, 23:26 pm
acaso cin no permite espacios?


Título: Re: me salta el getline
Publicado por: elkiy en 19 Febrero 2013, 23:32 pm
acaso cin no permite espacios?

creo que no, y si lso permite igual quiero saber porq salta el getline XD


Título: Re: me salta el getline
Publicado por: engel lex en 19 Febrero 2013, 23:43 pm
limpia el buffer... en c creo que con un getline vacio :P


Título: Re: me salta el getline
Publicado por: elkiy en 19 Febrero 2013, 23:47 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 :(


Título: Re: me salta el getline
Publicado por: engel lex 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)


Título: Re: me salta el getline
Publicado por: elkiy en 20 Febrero 2013, 00:01 am
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


Título: Re: me salta el getline
Publicado por: amchacon en 20 Febrero 2013, 01:27 am
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:

Código
  1. using namespace std;


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: engel lex en 20 Febrero 2013, 03:30 am
Citar
No, 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

PD: Repito, no tienes que usar todos esos "using std::". Basta con que pongas uno genérico:

Código
  1. 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...


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: elkiy en 21 Febrero 2013, 19:58 pm
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


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: Stakewinner00 en 21 Febrero 2013, 20:12 pm
una pregunta, por que no cambias esto
Código:
using std::cout;
using std::cin;
using std::endl;

por esto
Código:
using namespace std;


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: elkiy en 21 Febrero 2013, 20:17 pm
una pregunta, por que no cambias esto
Código:
using std::cout;
using std::cin;
using std::endl;

por esto
Código:
using namespace std;

me gusta usarlo asi como esta en el programa, me evita olvidarme cosas jeje :D


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: Stakewinner00 en 21 Febrero 2013, 20:21 pm
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.


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: amchacon en 21 Febrero 2013, 20:24 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).


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: Stakewinner00 en 21 Febrero 2013, 20:55 pm
ya lo sé, por eso digo que es igual. Pero en lo del using namespace no hay otra.


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: rir3760 en 22 Febrero 2013, 03:27 am
una pregunta, por que no cambias esto
Código:
using std::cout;
using std::cin;
using std::endl;

por esto
Código:
using namespace std;

+

ya 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


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: Stakewinner00 en 22 Febrero 2013, 07:42 am
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.


Título: Re: [SOLUCIONADO] me salta el getline
Publicado por: leosansan en 22 Febrero 2013, 23:31 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++:

Código
  1. #include <iostream>
  2. #include <cstdio>
  3. using std::cout;
  4. using std::cin;
  5. using std::endl;
  6.  
  7. #include <string>
  8. using std::getline;
  9. using std::string;
  10.  
  11. int main()
  12. {
  13. int numero1;
  14. int numero2;
  15. double numero3;
  16. string nombre;
  17.  
  18. cout << "Bienvenido, escriba 1 numero entero\n";
  19. cin >> numero1;
  20. cout << "Bien! ahora escriba un numero con decimales!\n";
  21. cin >> numero3;
  22. cout << "Escriba un numero entero\n";
  23. cin >> numero2;
  24. while (getchar ()!='\n');
  25. cout << "Escribe tu nombre y apellido!";
  26. while (getchar ()!='\n');
  27. cout << "\nBienvenido: " << nombre << endl;
  28. cout << "OK, ingreso los numeros: " <<numero1 << " " << numero3 << " " << numero2;
  29. cout << "hagamos unas cuentas...";
  30. cout << numero3 << "es igual a " << numero1 << " dividido " << numero2 << endl;
  31. numero3 = static_cast <double> (numero1) / numero2;
  32. cout << "tomando enteramente seria: " << numero1 / numero2;
  33. cout << "tomando con static es: " << numero3;
  34. cin.get();
  35. return 0;
  36. }
  37.  
Saluditos!.