2016-04-17 17 views
6

Sono abbastanza nuovo in C++ e sono molto vicino alla soluzione, ma ho ancora bisogno di aiuto. Il mio ciclo funziona correttamente la prima volta. Dopo di che, quando inserisco il numero dell'auto, sembra che prenda qualche input da qualche parte e che esegua solo il colore non valido sul secondo passaggio. Ovviamente, mi manca qualcosa, ma sono in perdita. Qualsiasi aiuto sarebbe apprezzato.Problemi del ciclo di validazione C++

Questo è solo un piccolo frammento del mio programma, ma ci pone il problema:

while (count < 3) 
{ 
    cout << endl << "Enter car color: blue, red or green in lower case. "; 
    getline(cin, carColor[count]); 

    if (!(carColor[count] == "blue" || carColor[count] == "red" || carColor[count] == "green")) 
    { 
     cout << "That is an invalid color" 
      << "The program will exit"; 
     cin.clear(); 
     cin.ignore(); 
     return 0; 
    } 


    cout << endl << "Enter car number between 1 and 99: "; 
    cin >> carNumber[count];     // Enter car number 
    if (carNumber[count] >99 || carNumber[count] < 1) 
    { 
     cout << "That is not a correct number" 
      << " The program will exit"; 
     return 0; 
    } 

    cout << "car no is:" << carNumber[count] << "color: " << carColor[count]; 


    ++count; 
// int lapCount{ 1 }; 

    cout << endl; 

} 
+1

Dopo aver immesso il numero di auto, sarà messo il numero seguito da un '\ n' (carattere di fine riga) nel buffer. Dato che non si cancella cin, dopo la prima iterazione del ciclo, il buffer ha solo quella linea di fine. Getline leggerà quindi la fine della prossima iterazione – Bettorun

risposta

4

Il '\n' carattere dopo aver premuto entrare in cin >> carNumber[count]; probabilmente rimane ancora così dopo aver eseguito il secondo passaggio di getline(cin, carColor[count]); si ottiene una stringa vuota. Una soluzione è quella di fare questo:

char c; 
cin >> carNumber[count]; 
cin >> c; 

Ma soluzione migliore sarebbe solo per cambiare:

getline(cin, carColor[count]); 

a:

cin >> carColor[count]; 
+0

OMG !!! Immagino sia quello che succede quando guardo il codice per 8 ore. il cin continuava a darmi errori, principalmente perché avevo << invece di >>. Grazie mille! Mi sento sciocco !! Grazie per le informazioni aggiuntive. Lo terrò a mente per il prossimo progetto :) – Caridore