我正在嘗試創建一個 ATM 銀行系統,該系統具有存款、取款、檢查余額等選項。起初我保持一個固定的余額值。然后讓余額通過提款,存款功能。但是當我檢查我的余額時,它起初顯示相同的固定值,它沒有更新。當我試圖退出函式時,我首先使用 mainmenu(),但如果我用回傳余額替換它。我的代碼不能正常作業。我的錯誤在哪里,我能做些什么來解決它。這是我的代碼:
void mainmenu()
{
int option, choose, balance = 10000;
printf("PRESS < 1 > CHECK BALANCE\n");
printf("PRESS < 2 > DEPOSIT\n");
printf("PRESS < 3 > WITHDRAW\n");
printf("PRESS < 4 > SEMESTER FEE\n");
printf("CHOOSE AN OPTION: ");
scanf("%d", &option);
switch (option)
{
case 1:
checkBalance(balance);
break;
case 2:
moneyDeposit(balance);
break;
case 3:
moneyWithdraw(balance);
break;
default:
printf("WRONG INPUT. PLEASE PRESS ANY KEY AND ENTER TO TRY AGAIN....");
char option[10];
scanf("%s", &option);
mainmenu();
}
void checkBalance(float balance)
{
printf("YOU CHOOSE TO SEE YOUR BALANCE\n");
printf("****YOUR AVAILABLE BALANCE IS: $%.2f\n", balance);
}
float moneyDeposit(float balance)
{
system("cls");
float deposit;
gotoxy(28, 2);
printf("YOU CHOOSE TO DEPOSIT MONEY\n");
gotoxy(22, 4);
printf("$$$$YOUR BALANCE IS: $%.2f\n\n", balance);
gotoxy(22, 7);
printf("****ENTER YOUR AMOUNT TO DEPOSIT: ");
scanf("%f", &deposit);
balance = deposit;
printf("****YOUR NEW BALANCE IS: $%.2f\n\n", balance);
printf("WOULD YOU LIKE TO DO ANOTHER TRANSACTION:\n");
gotoxy(17, 14);
printf("< 1 > YES\n");
gotoxy(17, 16);
printf("< 2 > NO\n");
int option;
do
{
gotoxy(10, 18);
printf("PLEASE CHOOSE YOUR OPTIONS...");
scanf("%d", &option);
if (option == 1)
{
mainmenu;
}
else if(option == 2)
{
menuExit();
}
else
{
printf("INVALID INPUT. PLEASE PRESS ANY KEY AND ENTER TO TRY AGAIN");
char choose[10];
scanf("%s", &choose);
}
} while (option > 2);
}
loat moneyWithdraw(float balance)
{
float withdraw;
gotoxy(28, 2);
printf("YOU CHOOSE TO WITHDRAW MONEY\n");
gotoxy(22, 4);
printf("$$$$YOUR BALANCE IS: $%.2f\n\n", balance);
gotoxy(22, 6);
printf("ENTER YOUR AMOUNT TO WITHDRAW:");
scanf("%f", &withdraw);
if (withdraw <= balance)
{
balance -= withdraw;
gotoxy(28, 9);
printf("$$$$YOUR WITHDRAWING MONEY IS: $%.2f\n", withdraw);
gotoxy(28, 11);
printf("****YOUR NEW BALANCE IS: $%.2f\n\n", balance);
}
else
{
gotoxy(28, 9);
printf(" YOU DON'T HAVE ENOUGH MONEY \n");
gotoxy(28, 11);
printf("****YOUR CURRENT BALANCE IS: $%.2f\n\n", balance);
gotoxy(28, 13);
printf("PLEASE DEPOSIT MONEY\n");
}
gotoxy(17, 16);
printf("WOULD YOU LIKE TO DO ANOTHER TRANSACTION:\n");
gotoxy(17, 18);
printf("< 1 > YES\n");
gotoxy(17, 20);
printf("< 2 > NO\n");
int option;
do
{
gotoxy(10, 22);
printf("PLEASE CHOOSE YOUR OPTIONS...");
scanf("%d", &option);
if (option == 1)
{
mainmenu();
}
else if(option == 2)
{
menuExit();
}
else
{
printf("INVALID INPUT. PLEASE PRESS ANY KEY AND ENTER TO TRY AGAIN");
char choose[10];
scanf("%s", &choose);
}
} while (option > 2);
}
uj5u.com熱心網友回復:
當您將變數作為引數傳遞給函式時,該變數被復制,因此您對變數的副本進行操作balance,當您從函式回傳時,該副本被釋放。
要解決這個問題,您需要傳遞一個指向變數的指標:
void moneyDeposit(float *balance){ // `*` indicates it is a pointer to a float
...
*balance = deposit; // with `*` you refer to a value under the pointer rather than to the pointer itself (equivalent of `balance[0]`)
}
moneyDeposit(&balance); // `&` gets an address of the variable
...或回傳更改后的值并將其分配回變數:
float moneyDeposit(float balance){
...
return balance deposit;
}
balance = moneyDeposit(balance);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/338416.html
