【发布时间】:2016-08-25 01:09:23
【问题描述】:
到目前为止,main() 执行良好,while 循环执行良好。如果我输入了错误的 PIN,程序执行会立即停止。否则,程序将继续执行其余部分。
我决定测试一个函数transfer(),这就是我遇到问题的地方。传递函数仅对 printf 语句正确执行。程序没有等待我输入要在哪个帐户上进行转账,而是跳回到transfer()的开头并不断重复……
transfer() 中的 switch 语句甚至没有执行!为什么?
//This program will mimick an ATM machine
//It will do deposits, withdrawals, and authentication
//Function Declarations
//float withdrawal();
//float deposit();
float transfer ();
void decision ();
float checking = 15050.00;
float savings = 8200.83;
#include <stdio.h>
int main ()
{
int PIN;
printf ("Welcome to Wells Fargo 24HR Teller!\n");
printf ("Enter Your 4-Digit PIN \n");
scanf ("%d", &PIN);
while (PIN == 2016) {
decision (); //this starts the ATM choices user can select
}
if (PIN != 2016) {
printf ("AUTHENTICATION FAILED");
}
return 0;
}
void decision ()
{
printf ("I want to:\n");
printf ("A) Make a Transfer\n");
//printf("B) Make a Deposit\n");
//printf("C) Make a Withdrawal\n");
//printf("D) Exit\n");
char selection;
scanf ("%c", &selection);
switch (selection) {
case 'A':
transfer ();
//case 'B': deposit();
//case 'C': withdrawal();
//case 'D': break;
}
}
float transfer ()
{
float transamt;
float chekbal;
float savbal;
printf ("Transfer Amount? \n");
scanf ("%f", &transamt);
printf ("\n Transfer Amount of %f", transamt);
printf ("\n Which Account? \n");
printf (" A) Checking \n");
printf (" B) Savings \n");
/*Right after this point, execution goes back to beginning of decision()
program execution doesn't go through switch statement */
char confirm;
scanf ("%c", &confirm);
switch (confirm) {
case 'A':
chekbal = (transamt + checking);
printf ("Checking Balance is Now %f", chekbal);
break;
case 'B':
savbal = (transamt + savings);
printf ("Savings Balance is Now %f", savbal);
break;
}
return 0;
}
【问题讨论】:
-
请创建一个minimal reproducible example。减少代码将帮助您确定大多数问题的罪魁祸首。请务必在提问时标记您的编程语言,并确保在发布之前正确格式化您的代码。
-
用scanf打印你读到的字符,你就会明白为什么了。
-
好吧,在
main中的if语句之后有一个return 0;,如果PIN是正确的,则调用函数,如果不是,则执行if中的printf并函数return0. -
我的水晶球说用scanf读取浮点数后,输入缓冲区中会留下一个新行并由字符scanf读取。
-
您需要在
%c之前使用带有空格的" %c",以便在读取PIN 时将换行符留在缓冲区中后跳过空格(换行符等)。等等。在switch中的操作之后,您缺少break语句,因此在您期望它只执行一个的地方执行了许多函数。
标签: c function loops switch-statement