c -如何从一个函数返回值到另一个函数



我正在尝试创建一个自动取款机银行系统,它有存款、取款、支票余额等选项。一开始我保持一个固定的余额值。然后让余额通过取款、存款功能。但当我检查我的余额时,它显示的是相同的固定值,它没有更新。当我试图摆脱函数时,我首先使用mainmenu(),但如果我将其替换为返回balance。我的代码不能正常工作。我的错误在哪里,我能做些什么来弥补它。下面是我的代码:

void mainmenu()
{
int option, choose, balance = 10000;
printf("PRESS < 1 >  CHECK BALANCEn");
printf("PRESS < 2 >  DEPOSITn");
printf("PRESS < 3 >  WITHDRAWn");
printf("PRESS < 4 >  SEMESTER FEEn");
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 BALANCEn");
printf("****YOUR AVAILABLE BALANCE IS:   $%.2fn", balance);
}
float moneyDeposit(float balance)
{
system("cls");
float deposit;
gotoxy(28, 2);
printf("YOU CHOOSE TO DEPOSIT MONEYn");
gotoxy(22, 4);
printf("$$$$YOUR BALANCE IS: $%.2fnn", balance); 
gotoxy(22, 7);
printf("****ENTER YOUR AMOUNT TO DEPOSIT: ");
scanf("%f", &deposit);
balance += deposit;
printf("****YOUR NEW BALANCE IS:   $%.2fnn", balance);
printf("WOULD YOU LIKE TO DO ANOTHER TRANSACTION:n");
gotoxy(17, 14);
printf("< 1 > YESn");
gotoxy(17, 16);
printf("< 2 > NOn");
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 MONEYn");
gotoxy(22, 4);
printf("$$$$YOUR BALANCE IS: $%.2fnn", 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:  $%.2fn", withdraw);
gotoxy(28, 11);
printf("****YOUR NEW BALANCE IS:   $%.2fnn", balance);

}
else
{
gotoxy(28, 9);
printf("+++YOU DON'T HAVE ENOUGH MONEY+++n");
gotoxy(28, 11);
printf("****YOUR CURRENT BALANCE IS:   $%.2fnn", balance);
gotoxy(28, 13);
printf("PLEASE DEPOSIT MONEYn");
}
gotoxy(17, 16);
printf("WOULD YOU LIKE TO DO ANOTHER TRANSACTION:n");
gotoxy(17, 18);
printf("< 1 > YESn");
gotoxy(17, 20);
printf("< 2 > NOn");
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);

}

当您将变量作为参数传递给函数时,该变量将被复制,因此您操作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);

最新更新