Jump to content

Error checking issues

- - - - -

This topic has been archived. This means that you cannot reply to this topic.
2 replies to this topic

#1
mistymoon1966

mistymoon1966

    Newbie

  • Members
  • Pip
  • 5 posts
This program compiles, builds and runs; however, I am having 2 issues with the error checking in the program. The first issue is that when I choose case 4 to exit the program you get an error message to enter a valid choice; however, when you re-enter 4, the program decides to work and tells you to press enter to exit the program. The second issue is that when you choose a location and enter a valid numerical value the program continues; however, when you enter a letter or invalid input, the program goes into an endless loop. Any help would be greatly appreciated, thanks.

The code is below:


#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: ");//Lets user know what tp input
	
	do {    /*Start loop*/  
 
	scanf("%d", &iResponse);
		if  (iResponse == 1 || iResponse <= 3) //Validates user input 
		{
		printf("\n\nPlease Enter the customer's purchase amount:$"); //display for user and prompt for input
		}
		else  	
		{
		printf("\nInvalid entry. Please select another option!\n");//Shows error and prompts user for a correct entry
		}
			
	scanf("%f", &Amount);	
	
     switch (iResponse){ /*Switch for case selection*/
   
/*Displays cases for tax calculation output*/  
       case 1: /*Tax Calculation output for Del Mar*/
       
        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);                
            } 
            
	  DelMarTax = Amount * DelMarRate / 100;
          printf("\nDel Mar Tax on $%.2f = $%4.2f; Total = $%4.2f",Amount,DelMarTax,Amount+DelMarTax);
          printf("\n\n\n");                   
          printf("\nChoose another city or 4 to exit program: ");/*prompt user for input*/
          break;
      
       case 2: /*Tax Calculation output for Encinitis*/
       
          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);                
            } 
            
	  EncinitasTax = Amount * EncinitasRate / 100;
          printf("\nEncinitas Tax on $%.2f = $%4.2f; Total = $%4.2f",Amount,EncinitasTax,Amount+EncinitasTax); 
          printf("\n\n\n");       
          printf("\nChoose another city or 4 to exit program: ");/*prompt user for input*/
          break;
     
       case 3: /*Tax Calculation output for LaJolla*/
       
          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);                
            } 
            
	  LaJollaTax = Amount * LaJollaRate / 100;
          printf("\nLa Jolla Tax on $%.2f = $%4.2f; Total = $%4.2f",Amount,LaJollaTax,Amount+LaJollaTax); 
          printf("\n\n\n");      
          printf("\nChoose another city or 4 to exit program: ");/*prompt user for input*/
          break;           
 
       case 4:
       
        printf("\nThank You for using the Kudler Fine Foods Tax Calculator\n"); //ends program	
	printf("\n\nPlease Press The Enter Key To Exit Program!\n\n");
	} /*End Switch*/
	}  while (iResponse!=4); /*End while loop*/

 scanf("%c\n");     
}/*end main*/


Edited by WingedPanther, 08 November 2009 - 10:54 AM.
fix code tags


#2
WingedPanther

WingedPanther

    A spammer's worst nightmare

  • Moderators
  • 16,831 posts
Your first if statement doesn't check to see if 4 was entered before displaying the error message.
Programming is a branch of mathematics.
My CodeCall Blog | My Personal Blog

#3
mistymoon1966

mistymoon1966

    Newbie

  • Members
  • Pip
  • 5 posts
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:



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:



#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.