how to stop the program if the value i get for amount_notes is not an integer?

74 Views Asked by At

Anyone know how to solve this problem? I want my program to be stop if the value of amount_notes is not an integer...But it still continue run although the value of amount_notes has decimal place or remainder...

#include <stdio.h>
#include <stdlib.h>
#define acc_balance 5000.00

int main()
{

   //variables decleration
    int rm_100, rm_50, rm_20, rm_10;
    float total_notes, total_100, total_50, total_20, total_10;
    float total_amount, balance_amount;
    int amount_notes;
    float withdraw_amount, withdraw_balance;


   // input
    printf("DEPOSIT SYSTEM\n\n");
    printf("Your balance is RM %.2lf\n\n", acc_balance);

    printf("Please key in the amount of notes for Cash Deposit :\n");
    printf("The number of RM 100 notes : ");
    scanf("%d", &rm_100);
    printf("The number of RM  50 notes : ");
    scanf("%d", &rm_50);
    printf("The number of RM  20 notes : ");
    scanf("%d", &rm_20);
    printf("The number of RM  10 notes : ");
    scanf("%d", &rm_10);

   //process
    total_notes = rm_10 + rm_20 + rm_50 + rm_100;

    if (total_notes > 100) {

        printf("\nThe process is unsuccessful because total exceed 99 notes.\n");

        return 0;
    }else{

        printf("\n");
        printf("Deposit Successful. You have deposit the following notes amount :\n");

        total_100 = 100 * rm_100;
        printf("RM 100 X %3d = RM %5.2f\n", rm_100, total_100);

        total_50 = 50 * rm_50;
        printf("RM  50 X %3d = RM %5.2f\n", rm_50, total_50);

        total_20 = 20 * rm_20;
        printf("RM  20 X %3d = RM %5.2f\n", rm_20, total_20);

        total_10 = 10 * rm_10;
        printf("RM  10 X %3d = RM %5.2f\n", rm_10, total_10);

        total_amount = total_100 + total_50 + total_20 + total_10;
        printf("\n\tTotal \t= RM %5.2f\n", total_amount);

        balance_amount = acc_balance + total_amount;
        printf("\nYour balance is now RM %.2f\n", balance_amount);

    }

    printf("\nWITHDRAWAL SYSTEM\n");

    printf("\nYour withdrawal balance is RM %.2f\n", balance_amount);

    printf("\nAmount to be Withdrawn : RM ");
    scanf("%f", &withdraw_amount);

    amount_notes = withdraw_amount / 50;
    withdraw_balance = balance_amount - withdraw_amount;

    if (withdraw_balance < 20) {

        printf("Insufficient Funds - Minimum Balance of RM20 must remain in your account.\n");

        return 0;

    }if (withdraw_amount <= 0) {

        printf("Invalid amount - Ensure the amount is greater than 0.\n");

        return 0;

    }if (amount_notes != (int)amount_notes) {
    //HERE THE PROBLEM, HOW TO STOP HERE IF THE AMOUNT_NOTES IN NOT AN INTEGER
        printf("Invalid amount - Ensure the amount is a multiple of 50.\n");

        return 0;

    }else{

        printf("\nWithdrawal Successful...\n");
        printf("\t%d notes X RM 50 = RM %.2f\n", amount_notes, withdraw_amount);

        printf("\nYour balance is now RM %.2f\n", withdraw_balance);

        return 0;

    }

}

The results show like this :

DEPOSIT SYSTEM

Your balance is RM 5000.00

Please key in the amount of notes for Cash Deposit :
The number of RM 100 notes : 10
The number of RM  50 notes : 10
The number of RM  20 notes : 10
The number of RM  10 notes : 10

Deposit Successful. You have deposit the following notes amount :
RM 100 X  10 = RM 1000.00
RM  50 X  10 = RM 500.00
RM  20 X  10 = RM 200.00
RM  10 X  10 = RM 100.00

    Total   = RM 1800.00

Your balance is now RM 6800.00

WITHDRAWAL SYSTEM

Your withdrawal balance is RM 6800.00

Amount to be Withdrawn : RM 300.50

//THE PROGRAM DIDN'T STOP HERE ALTHOUGH THE AMOUNT TO BE WITHDRAW HAS DECIMAL THAT SHOULDN'T BE SUCCESSFUL WITHDRAWAL ACTUALLY

Withdrawal Successful...
    6 notes X RM 50 = RM 300.50

Your balance is now RM 6499.50
Program ended with exit code: 0

How to solve this problem?? Need help...

4

There are 4 best solutions below

0
On BEST ANSWER

To make sure it is in fact a whole number, you could round it and compare that to the number itself, but you first need to declare it as an float:

float amount_nodes;
//some code 

if (floor(amount_notes) != amount_notes) {        
    printf("Invalid amount, it's not a whole number - Ensure the amount is a whole number.\n");

    return 0;
}

But if you want to make sure that amount_nodes is a multiple of 50 and a whole number (so for example 50, 150, 550) than you could just check the reminder, before you divide by 50:

if (amount_notes % 50f != 0f) {
    printf("Invalid amount - Ensure the amount is a multiple of 50.\n");

    return 0;
}
amount_notes = withdraw_amount / 50;
withdraw_balance = balance_amount - withdraw_amount;
0
On
unsigned int temp; // read into temporary unsigned int. Also solves the problem 
                   // of withdrawing negative numbers
scanf("%u", &temp);
if (temp % 50) 
{ // not evenly divisible by 50, print error and return.
    printf("Invalid amount - Ensure the amount is a multiple of 50.\n");

    return 0;
}

withdraw_amount = temp; // assign temporary value to float
amount_notes = withdraw_amount / 50; // continue as before
...
/* remove this:
if (amount_notes != (int)amount_notes) {
//HERE THE PROBLEM, HOW TO STOP HERE IF THE AMOUNT_NOTES IN NOT AN INTEGER
    printf("Invalid amount - Ensure the amount is a multiple of 50.\n");

    return 0;

}else{*/

Should add checks to return code of scanf so you know reading is valid.

0
On

Your comparison is always false as amount_notes is a int as you declared.

if (amount_notes != (int)amount_notes)  
//its equivalent to
//if ( `int` amount_notes != int amount_notes )
//which will always be false

Change data type of amount_notes to float in the declaration part
This will ensure your if condition make sense

float amount_notes; //in declaration part
//...else all your code is cool

if (amount_notes != (int)amount_notes){
//now it says
//if ( `float` amount_notes != (int)amount_notes)
printf("Invalid amount - Ensure the amount is a multiple of 50.\n");
    return 0;
}
0
On

stop if the value of amount_notes is not an integer

Do not define amount_notes as integer.

For example do

float amount_notes;