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

Stato
Discussione chiusa ad ulteriori risposte.

Svpam

Nuovo Utente
70
2
CPU
intel core i5-2310m
HDD
1TB Western digital 5400rpm
RAM
8gb ddr3
GPU
amd ati 7310m
Monitor
samsung E2220
OS
Windows 7; ubuntu 14.04; Kali linux; debian 7
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;
}
 

Marcus Aseth

Utente Attivo
404
138
OS
Windows 10
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.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili