【发布时间】:2016-06-21 19:14:49
【问题描述】:
我刚开始用 C 语言编程,我正在使用代码块来学习。我正在开发一个简单的 ATM 程序,并决定在输入无效条目时使用 goto 函数。当我第一次使用它时,它按预期运行。但现在它不会超过其中一个陈述。代码如下。
当任何选项 1-3 被按下时,它会按预期运行,但也会继续运行在它之后的选择错误部分。如果我只是尝试运行选择错误部分,它会通过它,并一遍又一遍地重复它。我该如何阻止这种情况发生?我只需要在满足条件时才运行无效的选择部分。谢谢!
int iSelection = 0;
float fTransAmount = 0.0;
float fBalance = 100.25;
printf("\n\n\tATM\n");
menu_options:
printf("\n1\t To Make a Deposit Press One");
printf("\n2\t To Make a Withdrawal Press Two");
printf("\n3\t To End Transaction, Press Three\n");
scanf("%d", &iSelection);
if (iSelection == 1) {
printf("\n Enter Amount to Deposit: ");
scanf("%f", &fTransAmount);
printf("\n Your new balance is: $%.2f", fBalance + fTransAmount);
} //End if for 1
if (iSelection == 2) {
printf("\n Enter Amount to Withdraw: ");
scanf("%f", &fTransAmount);
if (fTransAmount > fBalance)
printf("\n Insufficient funds, ending transaction.....\n");
else
printf("\n Your new balance is $%.2f\n", fBalance - fTransAmount);
} //End if for 2
if (iSelection == 3) {
printf("\n ending transaction");
} //End if for 3
if (iSelection != 1 || iSelection != 2 || iSelection != 3 ) {
printf("\nInvalid selection, please try again");
goto menu_options;
} //End if for Selection Error
【问题讨论】:
-
不要使用
goto。您可以将其重写为while循环,这将使其更易于使用和调试。请参阅:stackoverflow.com/questions/46586/goto-still-considered-harmful。 -
if (iSelection != 1 || iSelection != 2 || iSelection != 3 )的逻辑不对,应该是&&。但甚至不要这样做,将else if用于条件 2 和 3,然后使用else。 -
尽管 CS 教授说什么,
goto在 C 语言中的应用非常好。但它们应该保留在可以提高可读性的地方。您的代码不是一个好的用例。实际上它甚至不是一个可以接受的。使用其他迭代语句。 -
sn-p 不是程序。请参阅How to Ask 并提供minimal reproducible example。