1. ## help with number menu

Hey people, I m having trouble with some stuff with using c program..i want to calculate some number but i want them to write some detail as well such as first name initial and last name and so some other question(but i don't need you to help me on that because i already know how to do it)
i want to do a number menu on my program so that when you click the option number it will bring you to the question and when you finished with the question it will promp back to the menu number...
I tried using the boolean and use for loop because i know how many loop i need and how many question i have...
but the problem is i don't know to promp it back to the menu number and also if i have already enter question number 1 i wanted to be so that i can't go to question 1 again and the last problem is that if i don't enter all the answer and they wanted to get the result of the calculation it will have an error message...
Thank you

2. I'd create an 2d array of answers, where the 1st dimension is the answer, and the 2nd dimision is a flag specifing if they have answered the question.

The rest sounds pretty logical...

3. ohh by the way if you are curious with the full extent of the question here it is

loop getting all required information so as to be able
to calculate the BMI:
3) :
4) :
2) As it loops, your code will need to accept several
pieces of required information through the menu system:
a) If ? is entered, a usage or help message for this
program will be printed and the program will finish
with no other processing.
b) If Q is entered, the menu system looping will finish
and the BMI will be printed out for this individual
as specified below.
c) If a single digit is entered, the menu system will
input and process the required information after
prompting for it. (See example menu above).
The information required for the menu item single
digit is:
1) Prompt and get the person's integer age in years.
This age should be validated for reasonable ages.
2) Prompt and get the person's real weight and height
(in that order). The weight and height should be
validated for reasonable values.
These values are metric in kilograms and
centimetres.
3) Prompt and get the initial of the person's first
name. This initial must be an uppercase letter,
or an error message should be printed out and
the program finishes.
Any initial space characters may be skipped.
4) Prompt and get the person's last name. You should
declare a char array to hold this name and its
size is 20 characters. You must ensure that there
is enough room in the array to hold the lastname.
Any initial space characters may be skipped.
5) Prompt and ask if the person is male or female.
They can respond with either an 'm', an 'f' or
a '-' to signify the result.
Error and finish if not 'm', 'f' or '-'.

3) If the user chooses the same menu number twice, an
error message is issued and the program finishes.
4) The user may choose a menu number in any order.
5) If the user chooses Q before all required information
is obtained, then an error message is issued and
the program finishes.
6) The normal output is something along the lines of:
initial last_name is male and is X years old, is such and such a weight
and height, and has a BMI of xxx. This is a Weight Status of yyy.
The height must be specified to 0 decimal places,
the weight must be specified to 2 decimal places.
Choose an informative and professional output format for the entire output!
from english to pseudo-code as comments at the start of
the program.
Each refinement must show a logical progression of your
development.
Your final pseudo-code must conform to that in the
course notes.
8) Your C code style must conform to that shown in the
course notes.

4. im really really new to c program so i haven't done much array, but i m getting there soon, maybe in 2 or 3 weeks time..

5. Not a tiny bit interested in your homework. Try it yourself, and ask specifically where you get stuck with code examples where required.

6. ohh never mind if you miss understood me....
my question was the at the first post, the third post is just that if you don't really understand what i mean then i m giving the full extent of my question...
ok but maybe you can help me with this one then...
if i want to make a number menu, would you suggest i should use boolean or while loop or for loop??

7. What? If you want a numbered menu, unless your numbers only consist of one and zero, why would you use a boolean?

Quzah.

8. well i was thinking of declaring all my variable name to false then every time some one enter the menu the eg if i enter 1, the the false become true and i won't be able to re-enter 1 on the number menu again....thats how its suppose to work..but i'm missing some thing and i m not sure...

9. Without code it's like searching for a moth in a dark room...

10. ok here is my code so far
Code:
```/*This program converts your Mass and Height into Body Mass Index(BMI).*/

int main(int argc, char ** argv)
{
// Mainline Variable Declarations
FILE * output = stdout;
FILE * input = stdin;

//Declareation of Variables.
double Kilograms;
int CentiMetres;
double BMI;
int Age;
char * FName[20];
char * LName[20];
char * Gender[1];

fprintf(output,"1 = Enter Your First Name Initial? \n"); fflush(output);
fprintf(output,"2 = Enter Your Last Name?\n") fflush(output);
fprintf(output,"3 = Enter Your Age?\n") fflush(output);
fprintf(output,

//******************************************************************
//Enter first name.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Enter Your first name: "); fflush(output);

//input first name.
fscanf(input,"&#37;s",&FName);

//******************************************************************
//Enter last name.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Enter Your last name: "); fflush(output);

//input last name.
fscanf(input,"%s",&LName);

//******************************************************************
//Enter the Age.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Enter Your Age Between 18 to 100: "); fflush(output);

// input age.
fscanf(input,"%d",&Age);

// Reasonable value for age.
while ((Age < 18 )||( Age > 100))
{
//This error message will appear if the number enter in not with in the range.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Error\nYour Age Must be Between 18 to 100: ");fflush(output);
fscanf(input,"%s",&Age);
}

//******************************************************************
//Enter Gender

fprintf(output,"--------------------------\n");
fprintf(output,"Enter Your Gender (M/F): \n"); fflush(output);

//input Gender.
fscanf(input,"%s",&Gender);

// If Gender its not M/F/-,then error message should appear.
while (Age !=(M)||Age !=(F)||Age !=(-))
{
//This error message will appear if the number enter in not within the range.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Gender must be M(male)/F(female)/-: ");fflush(output)
fscanf(input,"%d",&Gender);
}

//******************************************************************
// Enter Mass in Kilograms.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Enter weight in kilograms: "); fflush(output);

// input Mass Kilograms.
fscanf(input,"%lf",&Kilograms);

//Reasonable value for Weight.
while ((Kilograms < 25) || (Kilograms > 230))
{
//This error message will appear if the number enter in not within the range.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Error\nYour Weight must be in between 25 to 230 ",Kilograms);
fscanf(input,"%lf",&Kilograms);
}

//******************************************************************
// Enter height in CentiMetres.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Enter Height in Centimetres: "); fflush(output);

// input height CentiMetres.
fscanf(input,"%d",&CentiMetres);
{
//Reasonable Value for Height.
while ((CentiMetres < 70) || (CentiMetres > 220))
{
//This error message will appear if the number enter in not within the range.
fprintf(output,"--------------------------\n"); fflush(output);
fprintf(output,"Error\nYour Height must be in between 70 to 220 Cm: ",CentiMetres);
fscanf(input,"%d",&CentiMetres);
}
}

//******************************************************************
// Calculation to get BMI.
fprintf(output,"--------------------------\n"); fflush(output);
BMI = ( Kilograms  / ( CentiMetres * CentiMetres ) * 10000);

//******************************************************************
// output results.
fprintf(output,"%s",FName);
fprintf(output," %s",LName);
fprintf(output," is %c",Gender);
fprintf(output," and is age %d",Age);
fprintf(output," and weight %lf",Kilograms);
fprintf(output," Kg and %d",CentiMetres);
fprintf(output," Cm Tall and has BMI of %.2f",BMI);

//******************************************************************
if (BMI<18.50)
{
fprintf(output," This is a Weight status of Underweight\n",BMI);
}
else if (BMI<24.99)
{
fprintf(output," This is a Weight status of Normal weight\n",BMI);
}
else if (BMI<29.99)
{
fprintf(output," This is a Weight status of Overwright\n",BMI);
}
else
{
fprintf(output," This is a Weight status of Obese\n",BMI);
}
}```

11. Originally Posted by j4k50n
well i was thinking of declaring all my variable name to false then every time some one enter the menu the eg if i enter 1, the the false become true and i won't be able to re-enter 1 on the number menu again....thats how its suppose to work..but i'm missing some thing and i m not sure...
Menu's may be written with endless loops (either while(1) or for(; ), which will have a break statement inside them.

Code:
```while (1)  {
then get you user's choice

switch (choice) {
case 0: break (out of the menu loop
case 1: if (!done[choice]) {
handle choice #1. Usually by calling the choice1 function to keep your switch
statement something reasonably small.
} else
break (unless you want case 1 control to fall down into case 2)
case 2: handle choice #2 same as #1, basically.
break
}```
You might also have a small int array called "done[# of choices on your menu]". If number 1 on your menu has been chosen, you set done[1] = 1; Which is very handy, because after you set done[all] = 0, now you know which menu choices have already been chosen by:

Code:
```if (!done[choice])
do your regular case stuff, it hasn't been chosen yet.
else
just print "Done" next to that menu choice.```
It's just like a boolean value, but you don't have to muck around with bools. 0 == not done, 1 == done.

12. > fprintf(output,"2 = Enter Your Last Name?\n") fflush(output);
Does this even compile?
There's all sorts of broken syntax in this post.

Read this post and build your code up in a methodical manner, then post when you first get stuck.

> fscanf(input,"%d",&Age);
> ...
> fscanf(input,"%s",&Age);
printf and scanf do not tolerate sloppy parameter passing at all. What is worse, very few compilers can check this (gcc is one of them), so you only get to find out about your mistake when you're staring at a crash.