switch statement/If statements trouble

I have nested if statements inside each case. The program runs, however, the only thing that works correctly is the $ termination. When I enter uppercase, lowercase letters it continues to prompt me to enter a choice. I tried playing around with brackets in different ways but the result has not changed. For cases 9 and 10, I want the user to be prompted over and over again to enter a choice until it is valid. This might require a for loop inside the do while loop?


Psuedocode:

Prompt user to enter a letters that correspond to a digit on the phone.

Input user’s choice.

While the user enters anything other than $, the program will run. $ will terminate the program.

If the user enters a Q or Z prompt that those letters are not on the phone and allow them to reenter a new choice until they enter something valid.

If the user enters a lowercase letter or special character, prompt that the program will not accept these and allow them to reenter a new choice until they enter something valid.

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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
  #include <iostream>

using namespace std;

int main()

 

{

       int num;

       char choice;

       char VIEW = '$';//declare $

      

       do

 

       {

              cout << endl

 

                     << "Enter A, B, or C for digit 2\n"

                     << "Enter D, E, or F for digit 3\n"

                     << "Enter G, H, or I for digit 4\n"

                     << "Enter J, K, or L for digit 5\n"

                     << "Enter M, N, or O for digit 6\n"

                     << "Enter P, R, or S for digit 7\n"

                     << "Enter T, U, or V for digit 8\n"

                     << "Enter W, X, or Y for digit 9\n";

 

              cin >> choice;

             

              switch(choice)

              {

 

              case 1:

                     if (choice == 'A' || 'B' || 'C')

                    

                           num = 2;

                           cout << "2";

                    

                     break;

 

              case 2:

                     if (choice == 'D' || 'E' || 'F')

                    

                           num = 3;

                           cout << "3";

                    

                     break;

 

              case 3:

                     if (choice == 'G' || 'H' || 'I')

                    

                           num = 4;

                           cout << "4";

                    

                     break;

                    

              case 4:

                     if (choice == 'J' || 'K' || 'L')

                    

                           num = 5;

                           cout << "5";

                    

                     break;

 

              case 5:

                     if (choice == 'M' || 'N' || 'O')

                    

                           num = 6;

                           cout << "6";

                    

                     break;

 

              case 6:

                     if (choice == 'P' || 'R' || 'S')

                    

                           num = 7;

                           cout << "7";

                    

                     break;

 

              case 7:

                     if (choice == 'T' || 'U' || 'V')

                    

                           num = 8;

                           cout << "8";

                    

                     break;

 

              case 8:

                     if (choice == 'W' || 'X' || 'Y')

                    

                           num = 9;

                           cout << "9";

                    

                     break;

 

              case 9:

                     if (choice == 'Q' || 'Z')

                    

                           num = 10;//this doesn't mean anything, just assigning a num variable value to be consistent with the other statements

                           cout << "There is no digit on the telephone that corresponds to" << choice;//Tell user there is no digit on the phone for Q or Z. Prompt user to enter new choice over and over again.

                           cin >> choice;

                    

                     break;

 

              case 10:

                     if (islower(choice))//if the choice is a lowercase letter or a special character, prompt user to enter a new choice over and over again.

                    

                           num = 11;//this doesn't mean anything, just assigning a num variable value to be consistent with the other statements

                           cout << "I only accept uppercase letters and no lowercase letters and no special characters. Please enter a new choice.\n";

                           cin >> choice;

                    

                     break;

 

              default:

                     cout << "Not a valid choice. Choose again.\n";//not sure if I need a default since I made cases for anything considered invalid. Likewise, would I need the cases for Q, Z and $ if I have the default? I can't tell thus far, since my program won't even ingest the valid choices and output a digit in the first place.

                     cin >> choice;

              }

       } while (choice != '$');//run the program for any choice input except $ which should terminate the program

                           return 0;

              }
if (choice == 'A' || 'B' || 'C')
see: http://www.cplusplus.com/forum/beginner/142861/#msg754000 (first sentence of it)

Also note that if you want to do more than one thing inside an if statement, you need to enclose it in curly braces.

1
2
3
4
5
if (something)
{
    do_this();
    do_that();
}

vs
1
2
3
if (something)
    do_this_if_something_is_true();
    this_will_run_either_way(); // not inside if-statement 

Last edited on
Pretty much what Ganado is saying.

- If statements only work without "curly braces" if there's only a single line of code to run.

- While programming does behave in a similar manner to the english language, it doesn't always take shortcuts. In this regard, when saying if choice is equal to a b or ec, you should be saying, if choice equals a or if choice equals b etc.

1
2
3
4
5
if(choice == 'A' || choice == 'B' || choice == 'C')
{
        doThis();
        andThis();
}


Edit : I'm not entirely sure on the accuracy of this related to c/c++ but it's a good habit to have, as other programming languages might require this of you.
Last edited on
Figured it out, thank you!
Topic archived. No new replies allowed.