menu problem !

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;
}
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.

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..
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
when i enter 'a' it show me the menu many times..
its actually give me the multipule menus right after i finish to describe the first meeting..
Perhaps you should re-post the latest version of your code.
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...
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.