如果我为 amount_notes 获得的值不是整数,如何停止程序?
how to stop the program if the value i get for amount_notes is not an integer?
有人知道怎么解决这个问题吗?如果 amount_notes 的值不是整数,我希望我的程序停止...但它仍然继续 运行 尽管 amount_notes 的值有小数位或余数...
#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;
}
}
结果是这样的:
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
如何解决这个问题??需要帮助...
为确保它实际上是一个整数,您可以将其四舍五入并将其与数字本身进行比较,但您首先需要将其声明为浮点数:
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;
}
但是如果你想确保 amount_nodes
是 50 的倍数和整数(例如 50
、150
、550
),那么你可以在除以 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;
您的比较始终是 false
,因为 amount_notes
是您声明的 int
。
if (amount_notes != (int)amount_notes)
//its equivalent to
//if ( `int` amount_notes != int amount_notes )
//which will always be false
在声明部分将 amount_notes
的数据类型更改为 float
这将确保您的 if
条件有意义
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;
}
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{*/
应该对 scanf 的 return 代码添加检查,以便您知道读取是有效的。
stop if the value of amount_notes is not an integer
不要将 amount_notes
定义为整数。
例如
float amount_notes;
有人知道怎么解决这个问题吗?如果 amount_notes 的值不是整数,我希望我的程序停止...但它仍然继续 运行 尽管 amount_notes 的值有小数位或余数...
#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;
}
}
结果是这样的:
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
如何解决这个问题??需要帮助...
为确保它实际上是一个整数,您可以将其四舍五入并将其与数字本身进行比较,但您首先需要将其声明为浮点数:
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;
}
但是如果你想确保 amount_nodes
是 50 的倍数和整数(例如 50
、150
、550
),那么你可以在除以 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;
您的比较始终是 false
,因为 amount_notes
是您声明的 int
。
if (amount_notes != (int)amount_notes)
//its equivalent to
//if ( `int` amount_notes != int amount_notes )
//which will always be false
在声明部分将 amount_notes
的数据类型更改为 float
这将确保您的 if
条件有意义
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;
}
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{*/
应该对 scanf 的 return 代码添加检查,以便您知道读取是有效的。
stop if the value of amount_notes is not an integer
不要将 amount_notes
定义为整数。
例如
float amount_notes;