Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: pablovg9 en 20 Julio 2015, 20:30 PM

Título: Duda simple, mi programa se salta una línea. C++
Publicado por: pablovg9 en 20 Julio 2015, 20:30 PM
Hola buenas!

Bueno estoy aprendiendo a programar así que tengo fallos básicos que no se solucionar.

En este caso por alguna razón que desconozco al insertar un valor se salta la siguiente línea.


#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

int main()
{
  double price;
  int units;
  char dis;
  string fname, nif, adds, pname;

  cout << "Product's price: " << endl;
  cin >> price;

  cout << "Units sold: " << endl;
  cin >> units;

  cout << "Discount (Y/N): " << endl;     //Sí aquí pongo cin.get(dis) se salta
  cin >> dis;                             //esta línea en vez de la de fullname

  cout << "Fullname: " << endl;           //Se salta directamente fullname
  getline(cin, fname);                    //no se por qué

  cout << "NIF: " << endl;
  getline(cin, nif);

  cout << "Address: " << endl;
  getline(cin, adds);

  cout << "Product's name: " << endl;
  getline(cin, pname);

return 0;
}


Seguro que es una tontería pero llevo una hora atascado con eso  :-[
Título: Re: Soy un n00b
Publicado por: engel lex en 20 Julio 2015, 20:36 PM
Hola!

modifica el titulo! el mismo debe ser descriptivo al problema expuesto
Título: Re: Duda simple, mi programa se salta una línea. C++
Publicado por: ivancea96 en 20 Julio 2015, 21:35 PM
El problema es que "cin >>" deja en el buffer de entrada el salto de linea, '\n'. Entonces, getline() al tratar de leer, lo encuentra, y termina ahí.

Lo que puedes hacer, es colocar "cin.ignore();" después del "cin >>", para ignorar el salto de linea que quedará ahí.

Otra forma, es usar getline siempre. Cuando tengas entradas más elaboradas, en un futuro, te recomiendo usar siempre getline(), y convertir en números con funciones como stoi(), stod(), etc, para convertir las strings en enteros, doubles, etc. Pero temporalmente, ignore() te ha de servir.
Título: Re: Duda simple, mi programa se salta una línea. C++
Publicado por: pablovg9 en 21 Julio 2015, 01:40 AM
Muchas gracias, me funcionó  ;D