coder
coder

Reputation: 23

while loop if and else

What the code does is ask the user which card he wants and prints out a statement depending on which card is chosen.

My aim is to loop back to the card select function if numbers other than 1,2 and 3 are entered.

There is also a for loop which allows this process to go around multiple times.

What is the best way and how can I do this?

int CardSelect() {

  cout << "Enter 1 for hearts" << endl;
  cout << " " << endl;
  cout << "Enter 2 for diamonds" << endl;
  cout << " " << endl;
  cout << "Enter 3 for joker" << endl;

  return 0;
};

int main() {
  for (int i = 1; i <= 5; i++) {
    CardSelect();
    int cardchoice;
    cin >> cardchoice;

    cardchoice = CardSelect();

    if (cardchoice == 1) {
      cout << "You got hearts" << endl;
      loop = false;
    } else if (cardchoice == 2) {
      cout << "You got diamonds" << endl;
      loop = false;
    } else if (cardchoice == 3) {
      cout << "You got joker" << endl;
      loop = false;
    } else {
      cout << "Invalid choice" << endl;
      cout << "Please ensure you type in the right numbers" << endl;
    }
  }
}

Upvotes: 0

Views: 130

Answers (3)

user11422223
user11422223

Reputation:

Change return type of CardSelect() to void, since your simply printing some statements in that function:

void CardSelect() 
{ // Your cout statements
}

Call that in main(), and use a switch case for your cardchoice variable.

If you want to keep running the switch statement till you get a valid input, put everything in an inifinte loop (such as a while(1)) and set an exit condition by setting a boolean to true (set it to false initially) and using break when condition is satisified, to get out of the loop:

int main() 
{
  while(1)
  {
    bool valid = false;
    CardSelect(); // call to your function
    int cardchoice;
    cin >> cardchoice;

    switch(cardchoice)
    {
      case 1:      
      cout << "You got hearts" << endl;
      valid = true;
      break;

      case 2:     
      cout << "You got diamonds" << endl;
      valid = true;
      break;

      case 3:    
      cout << "You got joker" << endl;
      valid = true;
      break;

      default:
      cout << "Invalid choice" << endl;
      cout << "Please ensure you type in the right numbers" << endl;
      break;
    } if(valid) break;
  }
}

Upvotes: 1

user
user

Reputation: 944

First, what you are looking for is continue, second you need to get rid of this line which makes no sense : cardchoice = CardSelect(); as it erases user input

int CardSelect() {
    cout << "Enter 1 for hearts" << endl;
    cout << " " << endl;
    cout << "Enter 2 for diamonds" << endl;
    cout << " " << endl;
    cout << "Enter 3 for joker" << endl;

    return 0;


};



int main() {

for (int i = 1; i <= 5; i++) {
    CardSelect();
    int cardchoice;
    cin >> cardchoice;


    if (cardchoice == 1) {
        cout << "You got hearts" << endl;
    }

    else if (cardchoice == 2) {
        cout << "You got diamonds" << endl;

    }

    else if (cardchoice == 3) {
        cout << "You got joker" << endl;
    }

    else {
        cout << "Invalid choice" << endl;
        cout << "Please ensure you type in the right numbers" << endl;
    }
}

}

Upvotes: 0

dj1986
dj1986

Reputation: 362

you should not call cardchoice = CardSelect();.

This call is overwriting cardchoice with 0. Remove this call.

You print values to see what is happening. Its a good way of learning. Hope this will help.

Upvotes: 0

Related Questions