menu problem !

Dec 17, 2015 at 9:15pm
why is it bring me the menu and the qwestions after that many times ? i know its getting the details i put in because when i print it its show the details...

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

#include "stdafx.h"
#include <iostream>
#include <allocators>
using namespace std;

typedef struct {
	int first;
	int seconf;
}
hour;

typedef struct {
	int day;
	int munth;
	int year;
}
date;



typedef struct {
	date date1;
	hour hour1;
	char descrube[100];
}
meet;

meet read() {
	meet read1;
	cout << "date:" << endl;
	cin >> read1.date1.day;
	cin >> read1.date1.munth;
	cin >> read1.date1.year;
	cout << "hour:" << endl;
	cin >> read1.hour1.first;
	cin >> read1.hour1.seconf;
	cout << "describe:" << endl;
	cin >> read1.descrube;
	return read1;
}
void print1(meet print, int num) {
	cout << "the " << num << " meeting is:" << endl;
	cout << print.date1.day << "/" << print.date1.munth << "/" << print.date1.year << endl;
	cout << print.hour1.first << ":" << print.hour1.seconf << endl;
	cout << print.descrube << endl;
}
meet *add(meet *a, int q) {
	a = (meet*)realloc(a, sizeof(meet) *  q);
	if (a == NULL) {
		cout << "faild to allocate..." << endl;
		exit(1);
	}
	cout << "put the new meeting:" << endl;
	a[q - 1] = read();
	return a;
}
meet *del(meet* d, int w) {
	int x, l,dint = 0;
	cout << "what is the meeting number u want to delite: ? " << endl;
	cin >> x;
	x -= 1;
	meet *old = d;
	for (l = 0; l < w; l++) {
		if (l == x) {
			l++;
		}
		d[dint] = old[l];
		dint++;
	}
	d = (meet*)realloc(d, sizeof(meet) * w);
	if (d == NULL) {
		cout << "faild to allocate.." << endl;
		exit(2);
	}
	return d;
}

int main()
{
	meet *m = NULL;
	char c = 'y';
	int counter = 0, p, num1 = 1;

	cout << "menu:" << endl;
	cout << "enter a to add a meeting:" << endl;
	cout << "enter d to delete a meeting:" << endl;
	cout << "enter p to pring the list of meetings:" << endl;
	cout << "enter e to exit:" << endl;



	while (c != 'e') {
	
		
		cin >> c;
		if (c == 'a') {
			counter++;
			m = add(m, counter);
		}
		else if (c == 'd') {
			counter--;
			m = del(m, counter);
		}
		else if (c == 'p') {
			num1 = 1;
			for (p = 0; p < counter; p++) {
				print1(m[p], num1);
				num1++;
			}
			
		}
		else;
		
		
		cout << "menu:" << endl;
		cout << "enter a to add a meeting:" << endl;
		cout << "enter d to delete a meeting:" << endl;
		cout << "enter p to pring the list of meetings:" << endl;
		cout << "enter e to exit:" << endl;
		c = 'y';
	}

	

	
    return 0;
}
Dec 17, 2015 at 9:36pm
You're getting the user input after you have checked the while() condition. You need to get the user input before you check the while() condition.
1
2
3
4
5
6
7
8
        cin >> c;
	while (c != 'e') {
		if (c == 'a') {
...

		cout << "enter e to exit:" << endl;

                cin >> c;


Also since c is a char you'll probably need to make sure that the input buffer is empty before the cin >> call.

Dec 18, 2015 at 2:10pm
its not helping.. and c was y before the while so i dont understand why i need to cin >> before the while.. anyway.. i try it. it have the same problem..
Dec 18, 2015 at 3:18pm
Line 96: If the user enter 'e', you fall through to line 116 and display the menu again.

Lines 97-113: These lines are ideally suited to a switch statement.
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
	while (cin >> c)   // while input operation successful
	{   switch (c)
	    {
	    case 'a':   
		    counter++;
			m = add(m, counter);
		    break;
		    
		case 'd': 
			counter--;
			m = del(m, counter);
			break;
		
		case 'p': 
			for (p = 0; p < counter; p++) 
				print1(m[p], p+1);
                       break;
        
               case 'e':            
		    return 0;			
            
                default:
                     cout << "Invalid Selection" << endl;
		}  // end switch
    					
		cout << "menu:" << endl;
		cout << "enter a to add a meeting:" << endl;
		cout << "enter d to delete a meeting:" << endl;
		cout << "enter p to pring the list of meetings:" << endl;
		cout << "enter e to exit:" << endl;
	}  // end while 


Lines 85-89, 116-120: These lines are identical. They should be in a function. That way, if you change the menu, you only need to change it in one place.

Last edited on Dec 18, 2015 at 3:34pm
Dec 19, 2015 at 3:39pm
when i enter 'a' it show me the menu many times..
Dec 19, 2015 at 3:43pm
its actually give me the multipule menus right after i finish to describe the first meeting..
Dec 19, 2015 at 5:25pm
Perhaps you should re-post the latest version of your code.
Dec 19, 2015 at 8:23pm
No.. it is the last version.. and when i compile it when im finish to input the first meet structure, when i push the enter button its show me couple of times the menu.. and than i can choose and i put 'a' and it let me put the details and then when i finish and put enter.. it show me lots of menus again.. and after a while it goes crazy... i donk know why...
Dec 19, 2015 at 8:37pm
Since you have failed to heed any of the advice given, it's no wonder it still doesn't work.

Something like the following should work.
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
#include <iostream>

using namespace std;

int main()
{
//	meet *m = NULL;
	char c = 'y';
	int counter = 0, p, num1 = 1;

	cout << "menu:" << endl;
	cout << "enter a to add a meeting:" << endl;
	cout << "enter d to delete a meeting:" << endl;
	cout << "enter p to pring the list of meetings:" << endl;
	cout << "enter e to exit:" << endl;


    cin >> c;
	while (c != 'e') {


		if (c == 'a') {
			counter++;
//			m = add(m, counter);
		}
		else if (c == 'd') {
			counter--;
//			m = del(m, counter);
		}
		else if (c == 'p') {
			num1 = 1;
			for (p = 0; p < counter; p++) {
//				print1(m[p], num1);
				num1++;
			}

		}
		else;


		cout << "menu:" << endl;
		cout << "enter a to add a meeting:" << endl;
		cout << "enter d to delete a meeting:" << endl;
		cout << "enter p to pring the list of meetings:" << endl;
		cout << "enter e to exit:" << endl;
		cin >> c;

	}

    return 0;
}
Topic archived. No new replies allowed.