A code that needs to loop

Here is the finalized code i came up with with your help. sorry for deleting the original problem didnt realize i wasnt supposed to do that.


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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include <iomanip>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <string>
#include <stdlib.h>
using namespace std;

void pattern1();
void pattern2();
void pattern3();
void pattern4();

int main()
{
	bool bGettingInput = true;
	

	cout << "Welcome to pattern generator\n";
	cout << "Patterns can be sizes 2,3,4,5,6,7,8,9";
	cout << endl;

	
	while (bGettingInput)
	{
			int pattern, ready;
			cout << "1. pattern 1\n";
			cout << "2. pattern 2\n";
			cout << "3. pattern 3\n";
			cout << "4. pattern 4\n";
			cout << "enter your pattern choice\n";
			cin >> pattern;
			cout << "ready? Press 1 for yes Press any other key to quit\n";
			cin >> ready;
	
			if (ready == 1)
			{
				switch (pattern)
				{
				case 1:
					pattern1();
					break;
				case 2:
					pattern2();
					break;
				case 3:
					pattern3();
					break;
				case 4:
					pattern4();
					break;
				



				}
			

		}
			else
			break;
			

			

		}
		cout << "Exiting\n\n";
		cout << "Thanks for making patterns with me!!";
		cout << endl;
		cout << "press any key to continue...";
		cin.ignore();
		char ch = getchar();

	}

void pattern1()
{
	int size;
	cout << "enter pattern size\n";
	cin >> size;
	int i, j;
	if (size > 1 && size < 10)
	{
		for (i = 0; i < size; i++)
		{
			cout << endl;
			for (j = 0; j < size; j++)
			{
				if (i <= j)

					cout << size;
				else
					cout << "$";
			}
		}
		if (size <= 1 && size >= 10)
		{
			cout << "size error";
	}
	}
	cout << endl;
	cout << "\n\n";
}

void pattern2()
{
	int size;
	cout << "enter pattern size \n";
	cin >> size;
	int i, j;
	if (size > 1 && size < 10)
	{
		for (i = 0; i < size; i++)
		{
			cout << endl;
			for (j = 0; j < size; j++)
			{
				if (i <= j)

					cout << "$";
				else
					cout << size;
			}

		}
		if (size <= 1 && size >= 10)
		{
			cout << "size error";
		}
	}
	cout << endl;
	cout << "\n\n";
}
void pattern3()
{
	int size;
	cout << "enter pattern size \n";
	cin >> size;
	int i, j;
	if (size > 1 && size < 10)
	{
		for (i = 0; i < size; i++)
		{
			for (j = 0; j < size; j++)
				if (j == i)
					cout << size;
				else
					cout << "$";
			cout << endl;
		}

	}
	cout << endl;
	cout << "\n\n";
}
void pattern4()
{
	int size;
	cout << "enter pattern size \n";
	cin >> size;
	int i, j;
	if (size > 1 && size < 10)
	{
		for (i = size; i > 0; i--)
		{
			for (j = 0; j < size; j++)
				if (j == i)
					cout << size;
				else
					cout << "$";
			cout << endl;
		}

	}
	cout << endl;
	cout << "\n\n";


}

Last edited on
You can try to set up a Boolean, such as this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

bool bGettingInput = true;


while( bGettingInput )
    {
    //    Put your code to get the input in this new while loop:

    //    Add this test in your switch statement:

        case 'q':
            bGettingInput = false;

            break;

    }    /*    while( bGettingInput )    */



That should do it?
yesss thank you
Please don't delete you r original post, it's considered rude :+)
i reposted the code to correct that my bad for anyone who found that rude :) first time poster
Well you didn't add the case 'q': statement, but what you do have should work anyway. I think what I suggested is a little more clearer.
when i added the q statement it made an infinite loop for some reason whenever i tried to quit and im pretty sure it still infinitely loops when you try to quit if you run the program a certain amount of times before exiting
I tested your code and added the case 'q' statement. It works for me. Where did you put the case 'q' statement?
Hi,

One should also have a default: case to catch bad input.

Not sure what compiler you use, but here is some info to do with the gcc compiler:

There is a compiler option with gcc that enables a warning for this: -Wswitch-default

Also consider using an enum with a switch, and use the -Wswitch warning if there is no case for each of the enums. This is disabled if there is a default case though.

https://gcc.gnu.org/onlinedocs/gcc-5.2.0/gcc/Warning-Options.html#Warning-Options


Some other things:

Your main function could be made more tidy by having a function to print the menu. Even have a function to say goodbye if you want.

You could also have a function to get the size input and validate it, each pattern function can call this function. If you find yourself writing the same code over and over, then there is a better way :+)

If you set your editor to change tabs into spaces, your code will display better when you post it here. The problem with tabs is they get converted to 8 spaces.

Good Luck !! :+)
seriously i learn more from you guys than i do in school its wonderful im gonna go back through and clean up this code. also im looking for the file i made to show you where i put the q statement. i am sure i put it in the wrong spot or somthing this was the very first code i had written .
Topic archived. No new replies allowed.