RISOLTO [C++] Non legge la stringa con getline

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Svpam

Nuovo Utente
Messaggi
70
Reazioni
2
Punteggio
27
Il problema mi chiede di leggere nell'ordine: un intero n, una frase memorizzata in una stringa e poi una serie di altre cose.
Se leggo l'intero n e poi la stringa non funziona, una volta letto l'intero viene saltata la lettura della stringa.
Se al contrario leggo prima la frase e poi l'intero funziona normalmente.

C++:
#include <iostream>
#include <string>
using namespace std;

//    prova 1, non funziona:
int main()
{
    int n;
    cin>>n;

    string frase;
    getline(cin, frase); //non legge la stringa

    cout<<endl<<n<<" "<<frase;
    return 0;
}
//-------------------------------------------
// prova 2, funziona:
int main()
{
    string frase;
    getline(cin, frase);

    int n;
    cin>>n;

    cout<<endl<<n<<" "<<frase;
    return 0;
}
 
Codice sotto.
Quando chiami getline per primo, ti permette di scrivere la frase e premi invio per eseguire.
Quando invece chiami cin per primo, nello stream hai il numero da te immesso ed il tasto invio premuto per confermare. Percui il numero và dentro la variabile, invio rimane nello stream e viene immediatamente letto da getline che esegue, percui non è che il primo esempio non funziona, è che per farlo funzionare dovresti immettere l'input in una singola riga e separato da un whitespace, esempio:
5 input magico!
Aggiungendo cin.ignore() in pratica l'invio che rimane nello stream dopo che il numero è stato preso, viene scartato.

Codice:
int main()
{
    int n;
    cin >> n;

    cin.ignore();

    string frase;
    getline(cin, frase);

    cout << endl << n << " " << frase;
    return 0;
}
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top