Cin.getline in un ciclo do while.

di il
1 risposte

Cin.getline in un ciclo do while.

Salve ragazzi,
sono Enzo, mi presento,
Da Ottobre ho iniziato la miaa avventura con il c++ per motivi di studio, sono uno studente, lavoratore.
MI trovo davanti ad un problema che non so prorprio come risolvere.

Problema iniziale: attraverso l'uso di struct inserire in una tabella max 50 esami ed ogin esame deve riportare titolo, voto, data esame.
#include <cstdlib>
#include <iostream>
# include <cstring>

using namespace std;
const int max_esami=15;
const int max_nome_esame=10;

struct data{
       int g;
       int m;
       int a;
       };
struct dati_esame{
       
       char nome[max_nome_esame];
       int voto;
       bool lode;
       data data_esame;
       };
int main(int argc, char *argv[])
{
 
 dati_esame esame[max_esami]; 
 int i=0; //indcice esame 
 
do{
   // nome esame.
    char titolo[max_nome_esame];
    cout<<"inserisci il titolo di un esame\n: ";
    cin.getline(titolo,max_nome_esame);
    // se inserisco "stop" esco dal ciclo.
    if(strcmp(titolo,"stop")==0)
    break;       
    else strcpy (esame[i].nome,titolo);
     
    //voto.
    
    int voto;
    do {cout<<"inserisci un voto in trentesimi\n : ";
    cin>>voto;
}while (voto < 0 || voto > 30);
    esame[i].voto=voto;
    
    //lode
    
    
    //data esame
    
    
     i++;
     }while (i<max_esami); 
 
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Quando eseguo il programma alla prima iterazione mi fa inserire correttamente il nome e il voto, alla seconda iterazione salta l'inserimento del titolo dell'esame, come se il comando cin.getline(titolo,max_nome_esame); non venga del tutto eseguito.

usando invece cin>>titolo; funziona, ma in questo caso non ho il controllo della lunghezza dell'inserimento esame.

Qualcuno di voi ha una soluzione o un'idea?
Grazie a tutti.
Enzo.

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte