Finally, the program works good except for 1 last issue. The last issue is that, in the input checking for the calculation for each case, if I enter a non-numeric value, I get an endless loop, any suggestions. The code that gives me an endless loop if I enter a non-numeric value when the program asks for a purchase amount is:
Code:
case 1: /*Tax Calculation output for Del Mar*/
do{
Return = 0;
/* Loop - Test the numeric values*/
for(i=0; Purchase[i]; i++)
{
if(Purchase[i] < '0' || Purchase[i] > '9') /* Test for a numeric value (0-9) */
{
if (Purchase[i] == '.') /* If character is a decimal continue */
continue;
else
Return=1; /* Set Non-Numerical Value flag */
break;
}
}
if (Return == 1) /* If Non-Numerical Value print Error Message and allow user to re-enter purchase price */
{
printf("\n\nError! Invalid Purchase Amount [ %s ]\n",Purchase);
fflush(stdin);
printf("\n\nPlease Re-enter Purchase Amount:$");
scanf("%s", Purchase);
}
}while (Return == 1);
The complete program code is:
Code:
#include <stdio.h>
#include <system.h>
#include <ctype.h>
#include <stdlib.h>
/*The main function*/
void main()
{
char Purchase[32]; /* Declare variables */
int i,Return=0;
/*Variables for tax calculator*/
int iResponse;
#define DelMarRate 7.25
#define EncinitasRate 7.5
#define LaJollaRate 7.75
float DelMarTax = 0.0;
float EncinitasTax = 0.0;
float LaJollaTax = 0.0;
float Amount = 0.0;
/*Sales tax calculations for each of Kudler's locations*/
DelMarTax = Amount * DelMarRate / 100;
EncinitasTax = Amount * EncinitasRate / 100;
LaJollaTax = Amount * LaJollaRate / 100;
/*Menu to chose location*/
printf("\n*********************************");
printf("\n* Welcome to Kudler Fine foods! *");
printf("\n*********************************");
printf("\n\n");
printf("\n1. Del Mar\n");
printf("\n2. Encinitas\n");
printf("\n3. La Jolla\n");
printf("\n4. End Program\n");
printf("\nPlease Choose Kudler Location or 4 to exit: "); /*requests user input*/
do { /*Start loop*/
scanf("%d", &iResponse);
if (iResponse == 1 || iResponse <= 4) /*validates user input*/
{
if(iResponse == 1 || iResponse <= 3)
{
printf("\n\nPlease Enter the customer's purchase amount:$");
scanf("%f", &Amount);
}
}
else
{
printf("\nInvalid entry. Please select another option!\n");/*shows error*/
}
switch (iResponse){ /*Switch for case selection*/
/*Displays cases for tax calculation output*/
case 1: /*Tax Calculation output for Del Mar*/
do{
Return = 0;
/* Loop - Test the numeric values*/
for(i=0; Purchase[i]; i++)
{
if(Purchase[i] < '0' || Purchase[i] > '9') /* Test for a numeric value (0-9) */
{
if (Purchase[i] == '.') /* If character is a decimal continue */
continue;
else
Return=1; /* Set Non-Numerical Value flag */
break;
}
}
if (Return == 1) /* If Non-Numerical Value print Error Message and allow user to re-enter purchase price */
{
printf("\n\nError! Invalid Purchase Amount [ %s ]\n",Purchase);
fflush(stdin);
printf("\n\nPlease Re-enter Purchase Amount:$");
scanf("%s", Purchase);
}
}while (Return == 1);
DelMarTax = Amount * DelMarRate / 100;
printf("*************************************************\n");
printf("\nDel Mar Tax on $%.2f = $%4.2f; Total = $%4.2f",Amount,DelMarTax,Amount+DelMarTax);
printf("\n\n\n");
printf("\nChoose another location or 4 to exit program: ");/*prompt user for input*/
break;
case 2: /*Tax Calculation output for Encinitis*/
do{
Return = 0;
/* Loop - Test the numeric values*/
for(i=0; Purchase[i]; i++)
{
if(Purchase[i] < '0' || Purchase[i] > '9') /* Test for a numeric value (0-9) */
{
if (Purchase[i] == '.') /* If character is a decimal continue */
continue;
else
Return=1; /* Set Non-Numerical Value flag */
break;
}
}
if (Return == 1) /* If Non-Numerical Value print Error Message and allow user to re-enter purchase price */
{
printf("\n\nError! Invalid Purchase Amount [ %s ]\n",Purchase);
fflush(stdin);
printf("\n\nPlease Re-enter Purchase Amount:$");
scanf("%s", Purchase);
}
}while (Return == 1);
EncinitasTax = Amount * EncinitasRate / 100;
printf("*************************************************\n");
printf("\nEncinitas Tax on $%.2f = $%4.2f; Total = $%4.2f",Amount,EncinitasTax,Amount+EncinitasTax);
printf("\n\n\n");
printf("\nChoose another location or 4 to exit program: ");/*prompt user for input*/
break;
case 3: /*Tax Calculation output for LaJolla*/
do{
Return = 0;
/* Loop - Test the numeric values*/
for(i=0; Purchase[i]; i++)
{
if(Purchase[i] < '0' || Purchase[i] > '9') /* Test for a numeric value (0-9) */
{
if (Purchase[i] == '.') /* If character is a decimal continue */
continue;
else
Return=1; /* Set Non-Numerical Value flag */
break;
}
}
if (Return == 1) /* If Non-Numerical Value print Error Message and allow user to re-enter purchase price */
{
printf("\n\nError! Invalid Purchase Amount [ %s ]\n",Purchase);
fflush(stdin);
printf("\n\nPlease Re-enter Purchase Amount:$");
scanf("%s", Purchase);
}
}while (Return == 1);
LaJollaTax = Amount * LaJollaRate / 100;
printf("*************************************************\n");
printf("\nLa Jolla Tax on $%.2f = $%4.2f; Total = $%4.2f",Amount,LaJollaTax,Amount+LaJollaTax);
printf("\n\n\n");
printf("\nChoose another location or 4 to exit program: ");/*prompt user for input*/
break;
case 4:
printf("\nThank You for using the Kudler Fine Foods Tax Calculator\n");
printf("\n\nPress The Enter Key To Exit Program!\n\n");
break;
default:
printf("\n\nPress 4 to Exit Program!\n\n");
} /*End Switch*/
} while (iResponse!=4); /*End while loop*/
scanf("%c\n");
}/*end main*/
The program works great as long as a non-numeric value is not entered after the user enters a location option and the program asks for a purchase amount. Thanks a lot for all your help everyone.