我刚刚开始用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'循环,这样可以更轻松地使用和调试。请参阅:http://stackoverflow.com/questions/46586/goto-still-considered-harmful。 –
“if(iSelection!= 1 || iSelection!= 2 || iSelection!= 3)”的逻辑错误,应该是&&'。但是,甚至不要这样做,在条件2和3中使用'else if',然后使用'else'。 –
尽管CS专业人士说,goto非常适合在C语言中使用,但他们应该保持在可提高可读性的位置。你的代码不是一个好用例。其实它甚至不是一个可以接受的。使用其他迭代语句。 – Olaf