Problema con getline

di il
4 risposte

Problema con getline

In pratica ho una struct, con una stringa e un float.
Vorrei prendere in input questi ultimi, e terminare quando la stringa è uguale ad "exit".
#include <iostream>
#include <string>
using namespace std;

struct Item {
	string name;
	float price;
} NewItem;

int main()
{
	do
	{
		cout << "Nome: "; getline(cin, NewItem.name);
		cout << "Prezzo: "; cin >> NewItem.price;
	} while (NewItem.name != "exit");
}

Il problema viene dopo la prima esecuzione del ciclo, dalla seconda volta salta direttamente alla seconda istruzione..
Cioe:
Nome: Primo
Prezzo: 1.00;
Nome: Prezzo: 2.00
Nome: Prezzo: 3.00
In pratica non mi fa inserire la stringa piu' volte, e vorrei sapere il perchè

4 Risposte

  • Re: Problema con getline

    In questo stesso forum


    https://www.iprogrammatori.it/forum-programmazione/cplusplus/getline-ignora-prima-parola-t43678.html
  • Re: Problema con getline

    Aiutami a capire bene se ho compreso.. in pratica ho cercato quando e perchè usare cin.ignore(), ed ho trovato sta roba:
    Quando un utente inserisce qualcosa tramite std::cin, nello stream buffer viene inserito il carattere '\n', successivamente se utilizzo getline(cin, str), str sarà uguale a '\n'. (?)
    Con cin.ignore(n, '\n') ignoro n caratteri fino a '\n'. Utilizzando "numeric_limits<streamsize>::max()", ignoro caratteri finchè non trovo '\n'. (?)
    Giusto?
  • Re: Problema con getline

    Sì e adesso prova a modificare il codice
  • Re: Problema con getline

    Ho inserito cin.ignore() alla fine del ciclo do..while.
    Cosi', dopo aver preso per la prima volta i dati in input, prima pulisco il buffer e poi continuo con il ciclo.
    Risolto
Devi accedere o registrarti per scrivere nel forum
4 risposte