Reputation: 25
First time poster here. I am taking a C programming course in school right now, having only taken programming essentials in the past. I have been struggling along but somehow managed to get through everything up to week 5.
Basically, here is what I have so far. What I am trying to do is have this program recycle back to the menu selection screen after you have already ran through it once. I believe I need to put everything in a while loop, but I have tried to add it in, but all that happens is I end up with the program asking me to input the hours for the choice I already selected. I am using Microsoft Visual Studio Express 2015 if that helps at all.
Thanks for any help/explanations.
#include <stdio.h>
#include <iostream>
#define BASEPAY1 8.75
#define BASEPAY2 9.33
#define BASEPAY3 10
#define BASEPAY4 11.20
#define BASEHRS 40
#define OVERTIME 1.5
#define AMT1 300
#define AMT2 150
#define RATE1 0.15
#define RATE2 0.20
#define RATE3 0.25
int main(void)
{
int hours;
float gross;
float net;
float taxes;
int choice;
printf("\n\nMenu\n----------\n\n");
printf("1) $8.75/hr\n");
printf("2) $9.33/hr\n");
printf("3) $10.00/hr\n");
printf("4) $11.20/hr\n");
printf("5) quit\n\n");
printf("Enter the number that corresponds to your rate or press 5 to quit.\n");
scanf_s("%d", &choice);
switch (choice) {
case 1:
printf("Enter the number of hours worked this week: \n");
scanf_s("%d", &hours);
if (hours <= BASEHRS)
gross = hours * BASEPAY1;
else
gross = BASEHRS * BASEPAY1 + (hours - BASEHRS) * BASEPAY1 * OVERTIME;
if (gross <= AMT1)
taxes = gross * RATE1;
else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
net = gross - taxes;
printf("gross: $%.2f \n", gross);
printf("taxes: $%.2f \n", taxes);
printf("net: $%.2f \n", net);
break;
case 2:
printf("Enter the number of hours worked this week: ");
scanf_s("%d", &hours);
if (hours <= BASEHRS)
gross = hours * BASEPAY2;
else
gross = BASEHRS * BASEPAY2 + (hours - BASEHRS) * BASEPAY2 * OVERTIME;
if (gross <= AMT1)
taxes = gross * RATE1;
else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
net = gross - taxes;
printf("gross: $%.2f \n", gross);
printf("taxes: $%.2f \n", taxes);
printf("net: $%.2f \n", net);
break;
case 3:
printf("Enter the number of hours worked this week: ");
scanf_s("%d", &hours);
if (hours <= BASEHRS)
gross = hours * BASEPAY3;
else
gross = BASEHRS * BASEPAY3 + (hours - BASEHRS) * BASEPAY3 * OVERTIME;
if (gross <= AMT1)
taxes = gross * RATE1;
else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
net = gross - taxes;
printf("gross: $%.2f \n", gross);
printf("taxes: $%.2f \n", taxes);
printf("net: $%.2f \n", net);
break;
case 4:
printf("Enter the number of hours worked this week: ");
scanf_s("%d", &hours);
if (hours <= BASEHRS)
gross = hours * BASEPAY4;
else
gross = BASEHRS * BASEPAY4 + (hours - BASEHRS) * BASEPAY4 * OVERTIME;
if (gross <= AMT1)
taxes = gross * RATE1;
else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
net = gross - taxes;
printf("gross: $%.2f \n", gross);
printf("taxes: $%.2f \n", taxes);
printf("net: $%.2f \n", net);
break;
case 5:
return 0;
default:
printf("Invalid choice, please enter the number that corresponds ");
printf("to your rate or press 5 to quit.\n\n");
}
system("PAUSE");
return 0;
}
Upvotes: 2
Views: 529
Reputation: 2184
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define BASEPAY1 8.75
#define BASEPAY2 9.33
#define BASEPAY3 10
#define BASEPAY4 11.20
#define BASEHRS 40
#define OVERTIME 1.5
#define AMT1 300
#define AMT2 150
#define RATE1 0.15
#define RATE2 0.20
#define RATE3 0.25
char *szMainMenu=
"\n\nMENU:\n"
"----------\n"
"\n"
" 1) $8.75/hr\n"
" 2) $9.33/hr\n"
" 3) $10.00/hr\n"
" 4) $11.20/hr\n"
" 5) quit\n"
"\n"
"Enter the number that corresponds to your rate or press 5 to quit.\nchoice: ";
/**____________________________________________________________________________
*/
int intPrompt(const char *prompt) {
int n;
printf("%s",prompt);
scanf(" %d",&n);
return n;
}
/**____________________________________________________________________________
*/
int main(void) {
int hours;
float gross;
float net;
float taxes;
int choice;
while((choice=intPrompt(szMainMenu))!=5) {
if(choice>=1 && choice<=4)
hours=intPrompt("Enter the number of hours worked this week: ");
switch (choice) {
case 1:
if (hours <= BASEHRS)
gross = hours * BASEPAY1;
else
gross = BASEHRS * BASEPAY1 + (hours - BASEHRS) * BASEPAY1 * OVERTIME;
if (gross <= AMT1)
taxes = gross * RATE1;
else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
net = gross - taxes;
printf("gross: $%.2f \n", gross);
printf("taxes: $%.2f \n", taxes);
printf("net: $%.2f \n", net);
break;
case 2:
if (hours <= BASEHRS)
gross = hours * BASEPAY2;
else
gross = BASEHRS * BASEPAY2 + (hours - BASEHRS) * BASEPAY2 * OVERTIME;
if (gross <= AMT1)
taxes = gross * RATE1;
else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
net = gross - taxes;
printf("gross: $%.2f \n", gross);
printf("taxes: $%.2f \n", taxes);
printf("net: $%.2f \n", net);
break;
case 3:
if (hours <= BASEHRS)
gross = hours * BASEPAY3;
else
gross = BASEHRS * BASEPAY3 + (hours - BASEHRS) * BASEPAY3 * OVERTIME;
if (gross <= AMT1)
taxes = gross * RATE1;
else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
net = gross - taxes;
printf("gross: $%.2f \n", gross);
printf("taxes: $%.2f \n", taxes);
printf("net: $%.2f \n", net);
break;
case 4:
if (hours <= BASEHRS)
gross = hours * BASEPAY4;
else
gross = BASEHRS * BASEPAY4 + (hours - BASEHRS) * BASEPAY4 * OVERTIME;
if (gross <= AMT1)
taxes = gross * RATE1;
else if (gross <= AMT1 + AMT2)
taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2;
else
taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3;
net = gross - taxes;
printf("gross: $%.2f \n", gross);
printf("taxes: $%.2f \n", taxes);
printf("net: $%.2f \n", net);
break;
default:
_clrscr();
printf(
"Invalid choice, please enter the number that corresponds\n"
"to your rate or press 5 to quit.\n\n"
"press a key to continue");
_getch();
}
_clrscr();
}
system("PAUSE");
return 0;
}
Upvotes: 0
Reputation: 849
The problem with your code is that the while loop is AFTER the prompt for wage rate. So it only executes that prompt once.
Simply move the line
while ( choice < 5) {
To before the line
printf("\n\nMenu\n----------\n\n");
Now it will loop the whole program as required.
Upvotes: 0
Reputation: 2442
You need to update the value of choice
in every steps. So, I would code something like:
int main(void)
{
// some code
int choice;
bool loop = true;
while(loop)
{
printf("\n\nMenu\n----------\n\n");
// print the menu
printf("Enter the number that corresponds to your rate or press 5 to quit.\n");
scanf_s("%d", &choice);
switch (choice) {
// cases 1-4
case 5:
loop = false;
break;
default:
printf("Invalid choice.\n\n");
} // exit from switch
} // exit from while-loop
return 0;
}
Upvotes: 2