2011-03-28 64 views
0

我剛學C++(1周的經驗),並嘗試寫一個輸入驗證循環,要求用戶輸入「是」或「否」。我想通了,但有一種感覺,有一個更好的方法來解決這個問題。這是我想出了:輸入驗證迴路用繩子

{ 
    char temp[5]; // to store the input in a string 
    int test; // to be tested in the while loop 

    cout << "Yes or No\n"; 
    cin.getline(temp, 5); 

    if (!(strcmp(temp, "Yes")) || !(strcmp(temp, "No"))) // checks the string if says Yes or No 
     cout << "Acceptable input";       // displays if string is indeed Yes or No 
    else             //if not, intiate input validation loop 
    { 
     test = 0; 
     while (test == 0) // loop 
     { 
      cout << "Invalid, try again.\n"; 
      cin.getline(temp, 5);    // attempts to get Yes or No again 
      if (!(strcmp(temp, "Yes")) || !(strcmp(temp, "No"))) // checks the string if says Yes or No 
       test = 1;   // changes test to 1 so that the loop is canceled 
      else test = 0;  // keeps test at 0 so that the loop iterates and ask for a valid input again 
     } 
     cout << "Acceptable input"; 
    } 

    cin.ignore(); 
    cin.get(); 

    return 0; 
} 

我爲我的可憐的筆記道歉,不知道什麼是相關的。我也使用cstring頭。

+0

請格式化你的代碼 – Heisenbug 2011-03-28 08:03:28

+0

不要使用'cstring'頭,除非你必須這樣做。 '#include '是一個更好的解決方案。 – hrnt 2011-03-28 08:08:07

+2

既然你在C++中工作,考慮使用'的std :: string'類。 – 2011-03-28 08:08:17

回答

0

我想你想一個do while循環:

bool test = false; 
do 
{ 
    cout << "Yes or No\n"; 
    cin.getline(temp, 5); 
    if (!(strcmp(temp, "Yes")) || !(strcmp(temp, "No"))) // checks the string if says Yes or No 
    { 
     cout << "Acceptable input"; // displays if string is indeed Yes or No 
     test = true; 
    } 
    else 
    { 
     cout << "Invalid, try again.\n"; 
    } 

} while (!test); 
+0

非常感謝!完美的作品 – tho121 2011-03-28 08:19:07

+2

'strcmp()'?在C++中?真? – Johnsyweb 2011-03-28 08:42:19

+1

它更意在顯示轉變爲'做{} while'循環。 – ChrisWue 2011-03-28 09:00:39

5

更妙的是IMO:

std::string answer; 

for(;;) { 
    std::cout << "Please, type Yes or No\n"; 
    getline(std::cin, answer); 

    if (answer == "Yes" || answer == "No") break; 
} 

您也可以將答案爲,允許用戶鍵入不僅是「是」低的情況下,而且「是」,「是的」,等等。參見this question

+1

使用'的std :: string'肯定不會只有更好是C++,它減少緩衝區溢出的風險,這使得字符串比較容易閱讀。但是,這個答案不允許「否」(及其案例變體)作爲有效輸入。 – Johnsyweb 2011-03-28 08:48:27

+0

是的,我忘了「否」;) – maverik 2011-03-28 08:51:38