我剛剛開始用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