2015-12-28 202 views
0

我的老師希望我在玩家的選擇中放置一個「嵌套驗證循環」,這樣可以保持循環,直到他們輸入有效的輸入(1,2或3)。我無法獲得任何工作,我可以得到一些指示,請和謝謝。C++嵌套驗證循環

#include <iostream> 
#include <ctime> 
#include <string> 
using namespace std; 

// Keaton Graffis 12/28/2015 

int main() 
{ 
    int seed = time(0); 
    srand(seed); 
    char playAgain; 
    int playerChoice, aiChoice, win = 0, tie = 0, lose = 0; 
    do 
    { 
     cout << "Lets play a game of rock paper scissors.\n"; 
     cout << "Enter a 1 for sccisors a 2 for rock or a 3 for paper: "; 

     // Generates outcomes of the players choice 
     cin >> playerChoice; 
     if (playerChoice == 1) 
     { 
      cout << "You picked Rock!\n"; 
     } 
     else if (playerChoice == 2) 
     { 
      cout << "You picked Paper!\n"; 
     } 
     else if (playerChoice == 3) 
     { 
      cout << "You picked Scissors!\n"; 
     } 

     // gentrate the computers choices 
     int aiChoice = rand() % 3 + 1; 

     if (aiChoice == 1) 
     { 
      cout << "The computer chose Rock!\n"; 
     } 

     else if (aiChoice == 2) 
     { 
      cout << "The computer chose Paper!\n"; 
     } 
     else if (aiChoice == 3) 
     { 
      cout << "The computer chose Scissors!\n"; 
     } 

     // Determines wins, ties and loses 
     if (playerChoice == 1 && aiChoice == 1) { 
      cout << "Rock meets Rock its a tie!" << endl; 
      tie++; 
     } 
     else if (playerChoice == 1 && aiChoice == 2) 
     { 
      cout << "Rock is covered by Paper the computer wins!." << endl; 
      lose++; 
     } 
     else if (playerChoice == 1 && aiChoice == 3) 
     { 
      cout << "Rock crushes Scissors you win!" << endl; 
      win++; 
     } 
     else if (playerChoice == 2 && aiChoice == 1) 
     { 
      cout << "Paper covers Rock you win!" << endl; 
      win++; 
     } 
     else if (playerChoice == 2 && aiChoice == 2) 
     { 
      cout << "Paper meets Paper its a tie!" << endl; 
      tie++; 
     } 
     else if (playerChoice == 2 && aiChoice == 3) 
     { 
      cout << "Paper is cut by Scissors the computer wins!" << endl; 
      lose++; 
     } 
     else if (playerChoice == 3 && aiChoice == 1) 
     { 
      cout << "Scissors are crushed by Rock computer wins!" << endl; 
      lose++; 
     } 
     else if (playerChoice == 3 && aiChoice == 2) 
     { 
      cout << "Scissors cuts Paper you win!" << endl; 
      win++; 
     } 
     else if (playerChoice == 3 && aiChoice == 3) 
     { 
      cout << "Scissors meet Scissors its a tie!" << endl; 
      tie++; 
     } 

     // Outputs wins, ties and loses 
     cout << "Wins: " << win << endl; 
     cout << "Ties:" << tie << endl; 
     cout << "Losses:" << lose << endl; 
     cout << "Would you like to play again? Y/N" << endl; 
     cin >> playAgain; 
     system("CLS"); 
     // Allow user to play again 
    } while (playAgain == 'Y' || playAgain == 'y'); 
} 
+0

當'playerChoice'不是'1','2'或'3'時會發生什麼?如果你沒有'else'語句來處理這種情況? –

+0

這就是我想要做的,但他說要使用一個循環,只是不斷重複cout語句「爲剪刀輸入1 ...」,並不斷從這裏查看if/else語句。 – frodo12311

+0

@ frodo12311查看下面的答案。 – ChrisD

回答

0

您可以在接收有效輸入時讀入輸入並從循環中斷開的代碼塊上放置一個while循環。

int choice; 
bool valid = false; 

while(!valid) { 
    cout << "Enter a 1 for scissors, 2 for rock, 3 for paper" << endl; 
    cin >> choice; 
    if(choice == 1 || choice == 2 || choice == 3) 
     valid = true; 
} 
+0

謝謝你,工作很棒。 – frodo12311