2016-04-17 12 views
6

Jestem całkiem nowym użytkownikiem języka C++ i jestem bardzo blisko rozwiązania, ale nadal potrzebuję pomocy. Moja pętla działa poprawnie za pierwszym razem. Potem, kiedy wprowadzam numer samochodu, wydaje mi się, że gdzieś tam jest wejście i po prostu wykonuje nieprawidłowy kolor w drugim przejściu. Oczywiście, czegoś mi brakuje, ale jestem zagubiony. Każda pomoc będzie doceniona.Problemy z pętlą walidacji C++

To tylko mały fragment mojego programu, ale nie stanowi problemu:

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

Po wprowadzeniu numeru samochodu, to będzie umieścić numer, po którym następuje znak "\ n" (znak końca linii) w buforze. Ponieważ nie kasuje się cin, po pierwszej iteracji pętli bufor ma tylko tę linię końcową. Getline przeczyta tę linię końcową w następnej iteracji – Bettorun

Odpowiedz

4

'\n' znak po naciśnięciu wprowadź w cin >> carNumber[count]; prawdopodobnie nadal pozostaje więc po wykonaniu drugiego przejścia z getline(cin, carColor[count]); masz pusty ciąg. Jednym z rozwiązań jest to zrobić:

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

Jednak lepszym rozwiązaniem byłoby po prostu zmienić:

getline(cin, carColor[count]); 

do:

cin >> carColor[count]; 
+0

OMG !!! Sądzę, że tak się dzieje, gdy patrzę na kod przez 8 godzin. Cin ciągle dawał mi błędy, głównie dlatego, że miałem << zamiast >>. Dziękuję bardzo! Czuję się głupio!! Dziękuję za dodatkowe informacje. Będę o tym pamiętać na następny projekt :) – Caridore