Errore programma C++

Pubblicità

Smoker223

Utente Attivo
Messaggi
530
Reazioni
52
Punteggio
57
Salve, ho un problema con un programmino in c++:

Questo è il codice che mi crea problemi:

void creacliente(){

int num;

for (num=0;;num++){
if (cliente[num].stato==0)
break;
}

cout<<endl<<"Cliente '"<<num<<"'"<<endl;
cout<<"Inserisci il nome del cliente: ";
1)cin.getline(cliente[num].nome,64);
2)cin>>cliente[num].nome;


cout<<"Inserisci il numero dei pezzi ordinati: ";
cin>>cliente[num].pezzi_ordinati;
cout<<"Inserisci il prezzo per singolo pezzo: ";
cin>>cliente[num].prezzo_pezzi;
cout<<"\nInserisci lo stato del pagamento di "<<cliente[num].nome<<"\n1 - PAGATO\n2 - MOROSO\n3 - IN RITARDO\nStato: ";
cin>>cliente[num].stato;

}

Devo inserire dei dati dei clienti in una struttura dichiarata globalmente.

Il problema sorge quando devo inserire il nome del cliente (cliente[num].nome).

con cin>> il sottoprogramma funge ma non legge oltre il primo spazio mentre con cin.getline la compilazione avviene ma la riga viene ignorata.

Il getline nel main funziona a dovere ma viene ignorato se lo metto in un sottoprogramma, dove sbaglio?

EDIT:

Ho risolto con il seguente codice:

void creacliente(){

int num;

for (num=0;;num++){
if (cliente[num].stato==0)
break;
}
cout<<endl<<"Cliente '"<<num<<"'"<<endl;
cout<<"Inserisci il nome del cliente: ";
cin.ignore();
cin.getline(cliente[num].nome,64)
;

cout<<"Inserisci il numero dei pezzi ordinati: ";
cin>>cliente[num].pezzi_ordinati;
cout<<"Inserisci il prezzo per singolo pezzo: ";
cin>>cliente[num].prezzo_pezzi;
cout<<"\nInserisci lo stato del pagamento di "<<cliente[num].nome<<"\n1 - PAGATO\n2 - MOROSO\n3 - IN RITARDO\nStato: ";
cin>>cliente[num].stato;

}

con il codice:
cin.ignore();
cin.getline(cliente[num].nome,64)
;

qualcuno può spiegarmi perchè è necessario cin.ignore();?
 
Ultima modifica:
Guarda qui: istream::ignore - C++ Reference
L'ignore ti aiuta perchè appunto ignora i caratteri che altrimenti sarebbero processati normalmente, nel tuo caso lo spazio terminava quello che ottenevi dalla getline(); con l'ignore() eviti questo problema "saltando" i caratteri rognosi. Ma è spiegato meglio nel link :)
 
Pubblicità
Pubblicità
Indietro
Top