Duda simple, mi programa se salta una línea. C++

Iniciado por pablovg9, 20 Julio 2015, 20:30 PM

0 Miembros y 1 Visitante están viendo este tema.

pablovg9

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  :-[

engel lex

Hola!

modifica el titulo! el mismo debe ser descriptivo al problema expuesto
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

ivancea96

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.

pablovg9