C Board  

Go Back   C Board > General Programming Boards > C Programming

Reply
 
LinkBack Thread Tools Display Modes
Old 11-08-2009, 10:39 AM   #1
Registered User
 
Join Date: Oct 2009
Posts: 7
Error checking issues

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:

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: ");//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*/
mistymoon1966 is offline   Reply With Quote
Old 11-08-2009, 10:58 AM   #2
Epy
Hen-teaser
 
Epy's Avatar
 
Join Date: Sep 2009
Location: Ohio
Posts: 437
Code:
(iResponse == 1 || iResponse <= 3)
iResponse == 4 will make it go to the else part and say invalid entry. Should be iResponse <= 4
__________________
-Jake
http://thatcadguy.blogspot.com/
Epy is offline   Reply With Quote
Old 11-08-2009, 11:01 AM   #3
Epy
Hen-teaser
 
Epy's Avatar
 
Join Date: Sep 2009
Location: Ohio
Posts: 437
Also, it looks like your program scans for the amount even if an invalid entry is pressed. You should have it keep prompting for the iResponse until it's a valid entry.
__________________
-Jake
http://thatcadguy.blogspot.com/
Epy is offline   Reply With Quote
Old 11-08-2009, 11:15 AM   #4
Registered User
 
Join Date: Oct 2009
Posts: 7
Okay, I changed
Code:
 (iResponse == 1 || iResponse <= 3)
to
Code:
 (iResponse == 1 || iResponse <= 4)
I still have to hit 4 2 times to exit the program as now I am asked to enter an amount when I hit 4 so this did not work. Also, I still have an endless loop if I enter an invalid entry in the amount of purchase for the location. Thanks.
mistymoon1966 is offline   Reply With Quote
Old 11-09-2009, 09:11 AM   #5
Registered User
 
Join Date: Oct 2009
Posts: 7
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.
mistymoon1966 is offline   Reply With Quote
Old 11-09-2009, 09:43 AM   #6
Jack of many languages
 
Dino's Avatar
 
Join Date: Nov 2007
Location: Katy, Texas
Posts: 2,175
Check the return value of scanf() for the numeric value. If zero, suck a character out of the buffer and try again.
__________________
Mac and Windows cross platform programmer. Ruby lover.

Quote of the Day
8/19: brewbuck: I do not recommend the above. In fact, it's so disgusting that I've blanked it out because you'd probably take it and run with it.
Dino is offline   Reply With Quote
Old 11-09-2009, 10:20 AM   #7
Registered User
 
Join Date: Oct 2009
Posts: 7
how do I check the return value of scanf(), thanks.
mistymoon1966 is offline   Reply With Quote
Old 11-09-2009, 11:53 AM   #8
Jack of many languages
 
Dino's Avatar
 
Join Date: Nov 2007
Location: Katy, Texas
Posts: 2,175
int return_value = scanf(......) ;
if (return_value == ......) { ... }
else { .... }
__________________
Mac and Windows cross platform programmer. Ruby lover.

Quote of the Day
8/19: brewbuck: I do not recommend the above. In fact, it's so disgusting that I've blanked it out because you'd probably take it and run with it.
Dino is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Serious template issues (!!!) Mikal C++ Programming 2 07-23-2009 08:46 AM
issues OrAnGeWorX C Programming 35 11-19-2008 12:18 AM
Bitmap scroll issues Gerread Windows Programming 4 05-14-2007 05:18 AM
Directx issues dpro Game Programming 7 03-30-2005 01:58 PM
hexdump issues daluu C Programming 2 03-04-2003 09:01 PM


All times are GMT -6. The time now is 04:57 AM.


Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22