|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2008
Messaggi: 13
|
[C++] Problema con il flusso di input "cin.getline()"
Ciao a tutti!!E' da poco che mi diletto con il C++ e ho riscontrato un problema al seguente programma che ho fatto per catalogare vinili.Quando inserisco i dati con il cin.getline() mi fa saltare la voce"artista" della struttura...le altre 2 no.. perche????(ho dovuto usare il cin.getline per poter inserire anche gli spazi..per inserire nome e cognome al campo artista ecc) Ecco il programma:
#include<iostream> using namespace std; struct vinile { char artista[30]; char album[30]; int anno; vinile* succ; }; typedef vinile* lista; void inserisci_in_testa(lista& inizio, vinile lp) { lista p=new vinile; *p=lp; p->succ=inizio; inizio=p; } void stampa_lista(lista output) { lista p=output; // p e output sono sinonimi while(p!=0) { cout<<output->artista<<'\n'<<p->album<<'\n'<<p->anno<<'\n'<<'\n'; p=p->succ; } } int main() { char r; vinile lp; lista catalogo=0; cout<<"CATALOGO VINILI\n"; do { cout<<endl<<"Digitare 't' per inserire in testa i dati dei vinili:\n"; cout<<"Digitare 'p' per stampare a video i dati inseriti:\n"; cout<<"Digitare 'e' per uscire...\n"; cin>>r; switch(r) { case 't': cout<<"Inserisci l'artista:\n";cin.getline(lp.artista,30); cout<<"Inserisci l'album:\n";cin.getline(lp.album,30 ); cout<<"Inserisci l'anno:\n";cin>>lp.anno; inserisci_in_testa(catalogo,lp); break; case 'p': stampa_lista(catalogo); break; case 'e': break; default: cout<<"ERRORE!!!L'operatore inserito e' errato!!\n";break; } }while(r != 'e'); system("pause"); } Grazie a tutti in anticipo!! Ultima modifica di Spanaccio : 26-12-2008 alle 16:40. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perché il cin lascia un carattere \n all'interno dello standard input. Di conseguenza la getline si ferma subito leggendo lo \n.
E' lo stesso identico problema che si presenta qui: http://www.hwupgrade.it/forum/showthread.php?t=1888798 |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Dec 2008
Messaggi: 13
|
Grazie mille!Ho dichiarato un "char d" e ho risolto mettendo subito dopo lo \n un cin.get(d)... adesso funziona perfettamente!
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Puoi svuotare lo stream così: while(cin.get() != '\n'); |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:00.




















