Time

Pages: 12
Yeah, VC++ doesn't care either way.

OP = Original Poster = TC = Topic Creator. In this case, you.
Hey I actually found an issue in my code. I used the sleep function.. I don't know if this has anything to do with it If you look at the code and it goes as follows.... Option U function The user has option after entering last name of 1-5 ..(i enter 8 or 29 whatever) the program shows the appropriate message then the program exits the function goes to main() where it updates the update variable ( and in theory should continue). What happens is I get the invalid choice message which is the last thing in the switch in main it doesn't do it alll the time so I don't know whats up.

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
//Option U Function
progress optionU( infoType tele[], int&size )
{	
	//Variables
	int index = 0;
	string lname = "";
	string newLname = "";
	string newFname = "";
	string newAdd = "";
	string newCSZ = "";
	string newPhone = "";
	int choice = 0;
	char choice2 = ' ';
	char iterate = ' ';
	bool found = false;
	
 while(iterate)
 {
	//Option U function message
	cout << "----You have selected option U.----" << endl;
	
	// To get record.
	cout << "Please enter the last name of record to be updated." << endl;
	
	//Get last name
	cin >> lname;
	
	//Convert first letter to upper
	lname[0] = toupper(lname[0]);
	
	//Find record
	while( index < size && !found )
	{
	  if(tele[index].lname.compare(lname)== 0)
	  {
		cout << endl;
		cout << "The entry to be updated is:" << endl;
		cout << tele[index].lname << endl;
		cout << tele[index].fname << endl;
		cout << tele[index].streetAdd << endl;
		cout << tele[index].cityStateZ << endl;
		cout << tele[index].phone << endl;
		cout << endl;
		    found = true;
	  }
		else if(!found)
		index++;
	}
	
	// If Entry is not located
	if(index == size)
		{
			cout << "Cannot Locate entry." << endl;
			cout << "Returning to menu." << endl;
			Sleep(2000);
			return MENU;
		}
	
	//User prompt
	cout << "Please select from one of the following:" << endl;
	cout << "1. Update last name." << endl;
	cout << "2. Update first name." << endl;
	cout << "3. Update street Address." << endl;
	cout << "4. Update city, state, and zip code." << endl;
	cout << "5. Update phone number." << endl;

	// To get selection	
	cout << endl;
	cout << "Enter choice" << endl;
	cin >> choice;
	switch(choice)
	{
	case 1: cout << "Please type the new last name. " << endl;
		cin.get();
		getline(cin,newLname);
		newLname[0] = toupper(newLname[0]);
		tele[index].lname = newLname;
		break;
	case 2: cout << "Please type the new first name. " << endl;
		cin.get();
		getline(cin, newFname);
		tele[index].fname = newFname;
		break;
	case 3: cout << "Please type the new  street address" << endl;
		cin.get();
		getline(cin,newAdd); 
		tele[index].streetAdd = newAdd;
		break;
	case 4: cout << "Please type the new  city, state, and zip code." << endl;
		cin.get();
		getline(cin,newCSZ); 
		tele[index].cityStateZ = newCSZ;
		break;
	case 5: cout << "Please type the new phone number."<< endl;
		cout << "(Example, 555-555-5555) " << endl;
		cin.get();
		getline(cin, newPhone);
		tele[index].phone = newPhone;
		break;
	default: cout << "Invalid selection. " << endl;
			 cout << "Returning to Main Menu." << endl;
			 Sleep(2000);
			 return MENU;
	}
	//Display updated entry updated
	cout << endl;
	cout << "--Updated information--. " << endl;
	cout << tele[index].lname << endl;
	cout << tele[index].fname << endl;
	cout << tele[index].streetAdd << endl;
	cout << tele[index].cityStateZ << endl;
	cout << tele[index].phone << endl;
	cout << endl;
	
  //To exit function
  cout << "Enter 'R' to return to Main Menu." << endl;
  while(choice !='R')	
  {
	cin >> choice2;
	choice2 = toupper(choice2);
	if(choice2 == 'R')
	{
	  return MENU;
	}
	else if(choice2 != 'R')
	{
	   cout << "Invalid, Please enter 'R' " << endl;
	}
  }
}

}

//Option D Function 
progress optionD( infoType tele[], int& size )
{	
	//Variables
	int index = 0;
	bool found = false;
	string dPhone;
	char iterate = ' ';
	char choice = ' ';
	
  while(iterate)
  {	
	//Message for option D function
	cout << "----You have selected option D---- " << endl;
	cout << "Please enter the phone number of the record to be deleted." << endl;
	cout << "(Example, 555-555-5555)" << endl;
	
	//Get number
	cin >> dPhone;
	
	//Show information at index and "delete an entry." 
	while( index < size && !found )
	{
		if(tele[index].phone.compare(dPhone)== 0)
		{
			cout << "--Deleting--" << endl;
			cout << endl;
			cout << tele[index].lname << endl;
			cout << tele[index].fname << endl;
			cout << tele[index].streetAdd << endl;
			cout << tele[index].cityStateZ << endl;
			cout << tele[index].phone << endl;
			cout << endl;
		//To "remove" element.
			--size;
			tele[index] = tele[size];
			found = true;
	     }
			else if(!found)
			index++;
	}
	
	//Message if not found
	if(index == size && !found)
	{
		cout << "Cannot Locate entry." << endl;
		cout << "Returning to Main Menu." << endl;
		Sleep(2000);
		return MENU;
	}

  //To exit function
  cout << "Enter 'R' to return to Main Menu." << endl;
  while(choice !='R')	
  {
	cin >> choice;
	choice = toupper(choice);
	if(choice == 'R')
	{
	  return MENU;
	}
	else if(choice != 'R')
	{
	   cout << "Invalid, Please enter 'R' " << endl;
	}
  }
 }
}

//Sort Function
 void sort(infoType tele[], const int& size)
 {
	
	int i, j;
	int smallest;
	
	for (i = 0; i < size - 1; i++)
	{
		smallest = i;

		for (j = i + 1; j < size; j++)
		{
			if (tele[j].lname != "" && tele[smallest].lname != "")
			{	
				 if( tele[j].lname <  tele[smallest].lname )
				{
					smallest = j;
				}
			}
		}
			//swap
			infoType temp = tele[smallest];
			tele[smallest] = tele[i]; 
			tele[i] = temp;              
	}
}




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
int main()
{	
	//Variables
	ifstream fin("input.txt");
	int newSize = 100;
    infoType tele[NSIZE];
	char selection = ' ';
	
	//Read from file
	readData(fin, tele, newSize );	
	
  //Main Algorithm
    do
	{
		system("cls");
		selection = displayMenu();
	
		//Function selection
	switch(selection)
	    {
		case 'A': update =  optionA(tele,newSize );
		break;
		case 'D': update = optionD(tele,newSize);
		break;
		case 'U': update =  optionU(tele,newSize );
		break; 	
		case 'L': optionL(tele,newSize );
		break;
		case 'E': update = EXIT;   
			break;	
		case 'F': cout << "Invaid choice " << endl;
		  Sleep(2000);  break;
		
	}
	
  }    while(update!= EXIT );
 
	system("pause");
I noticed that it occurs I think because the selection is supposed to be an int so if I enter 9 the program works and tells me invalid selection but if I enter k the program returns to main where it displays invalid choice and won't let me enter anything almost as if it's stuck.
If you do this:
1
2
    int choice;
    cin >> choice;

then you are saying the only valid input is an integer (may contain multiple digits).
If anything is entered which is not a valid integer, then the cin stream is put into an error state. You need to use cin.clear(); after the error, to reset the flags.

However, if you instead do this:
1
2
    char choice;
    cin >> choice;

then the user can input any single character, regardless of whether it is a digit or a letter etc.
Worked...simple fixes are nice. Thank you Chervil!
Topic archived. No new replies allowed.
Pages: 12