2016-04-17 89 views
6

我對C++非常陌生,並且非常接近解決方案,但我仍然需要一些幫助。我的循環第一次正常工作。之後,當我輸入車號時,它似乎在某處抓取一些輸入,並在第二遍中執行無效顏色。顯然,我錯過了一些東西,但我很茫然。任何幫助,將不勝感激。C++驗證循環問題

這只是我計劃的一小片段,但奠定了問題:

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

在輸入車號,它會放數字後跟緩衝區中的'\ n'(結尾字符)。由於你沒有清除cin,所以在循環的第一次迭代之後,緩衝區中只有該末端行。然後Getline將在下一次迭代 – Bettorun

回答

4

'\n'字符按在cin >> carNumber[count];進入後可能仍然存在,所以你執行的getline(cin, carColor[count]);後的第二次你一個空的字符串。一種解決方案是要做到這一點:

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

但更好的解決辦法只是改變:

getline(cin, carColor[count]); 

到:

cin >> carColor[count]; 
+0

OMG上閱讀該結束語!我想這就是當我查看8小時的代碼時發生的情況。 cin一直給我錯誤,主要是因爲我有「而不是」。非常感謝!我感到很傻!感謝您提供更多信息。我會記住下一個項目:) – Caridore