Do-while loops and while loops

I was wondering if anybody can take a look real quick, I have it so the user has to guess a generated number from 1 - 100, and everything works until the user runs out of "guesses" using the variable 'count'. I have the entire code within a do-while statement and a while statement within to check the guesses for 'count'. Whenever I try to enter the 'ans' for the do-while to take effect, it repeats

cout << "Sorry, you ran out of tries, would you like to try again? (Y / N): ";
cin >> ans;

over and over again, instead of restarting the game with 'y' or ending the game with 'n'. Any ideas?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
  char ans;
  do
  {
  srand((unsigned)time(0));
  int answer;
  for (int i = 0; i < 1; i++)
  {
    answer = (rand()%100)+1;
  }
  //Rules of the game

  cout << endl << "===========================================\n";
  cout << "           Guessing Game Rules\n";
  cout << endl << "The program will simply generate 1 - 100\n";
  cout << "randomly targeting 1 number for the player\n";
  cout << "  to try and guess the correct number.\n";

  //Begin the game
  cout << endl << "===========================================\n";
  cout << endl << "                 Points\n";
  cout << endl << "Try and guess the correct answer the least\n";
  cout << "as you can to earn more points and a title!\n";

  int count = 0;
  int num;
  int point = 100;
  

  cout << endl << "The program has generated a number!\n";
  cout << "What is the generated digit? ";
  cin >> num;
  

  //Calculate point + count

	while (num > answer || num < answer)
	{
		if (num > answer && count < 5)
		{
			 point -= 5;
			 count += 1;
			 cout << endl << "That is not the right answer!\n";
			 cout << endl << "You have guessed too high! -5 pts\n";
			 cout << "What is the generated digit? ";
			 cin >> num;
		}
		else if (num < answer && count < 5)
		{
			point -= 5;
			count += 1;
			cout << endl << "That is not the right answer!\n";
			cout << endl << "You have guessed too low! -5 pts\n";
			cout << "What is the generated digit? ";
			cin >> num;
		}
		else
		{
			cout << "Sorry, you ran out of tries, would you like to try again? (Y / N): ";
			cin >> ans;
		}
	}
  

  if (num == answer)
  {
    point -= count * 5;
    cout << endl << "Congradulations! You have guessed the right number!\n";
    cout << endl << "It took you " << count << " tries! Total Points: " << point;
  }

  //Titles
  if (count >= 8 )
  {
    cout << endl << "Try improving your luck and come try again!\n";
  }
  else if (count >= 6)
  {
    cout << endl << "You are very renowned!\n";
  }
  else if (count >= 4)
  {
    cout << endl << "You are the guessing master!\n";
  }
  else
  {
    cout << endl << "You are now the god of prediction!\n";
  }
    cout << endl << "Would you like to continue? (Y / N): ";
    cin >> ans;
  }
  while (ans == 'Y' || ans == 'y');

  cout << endl << "Thanks for playing the guessing game! Good bye!\n";
  
}
Last edited on
This code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
	while (num > answer || num < answer)
	{
		if (num > answer && count < 5)
		{
		// ...
		}
		else if (num < answer && count < 5)
		{
		// ...
		}
		else
		{
			cout << "Sorry, you ran out of tries, would you like to try again? (Y / N): ";
			cin >> ans;
		}
	}


does not depend on the value of ans
I thought that if I had a do-while loop within the whole thing, anything that detects ans being entered would work? How can I make this work?
You should provide correct exit from each loop.
Thanks but any advice on how I should go about?
I thought that if I had a do-while loop within the whole thing, anything that detects ans being entered would work?

I'm not entirely sure what you're saying. What thing detects ans being entered that could possibly terminate the loop?

How can I make this work?


To make a loop terminate on a condition, put the condition in the loop conditional expression:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <cctype>

// ...

       char ans = 'y' ;
	while (ans == 'y' && (num > answer || num < answer))
	{
		if (num > answer && count < 5)
		{
			 point -= 5;
			 count += 1;
			 cout << endl << "That is not the right answer!\n";
			 cout << endl << "You have guessed too high! -5 pts\n";
			 cout << "What is the generated digit? ";
			 cin >> num;
		}
		else if (num < answer && count < 5)
		{
			point -= 5;
			count += 1;
			cout << endl << "That is not the right answer!\n";
			cout << endl << "You have guessed too low! -5 pts\n";
			cout << "What is the generated digit? ";
			cin >> num;
		}
		else
		{
			cout << "Sorry, you ran out of tries, would you like to try again? (Y / N): ";
			cin >> ans;
                        ans = tolower(ans) ;
		}
	}


Although you need to do something with the innards of the loop or you're just going to get "Sorry you ran out of tries" every iteration once you've indicated you want to try again.

Topic archived. No new replies allowed.