我正在創建一個銀行程式,用戶在其中輸入卡號和密碼,并且我正在嘗試驗證他們的輸入。它適用于驗證一個卡號和密碼,但不適用于多個卡號和密碼。
代碼如下:
do {
printf("Card number: ");
scanf("%d", &cardNum);
printf("PIN: ");
scanf("%d", &pin);
if ( cardNum != 1111 && pin != 2222 || cardNum != 3333 && pin != 4444 ) {
printf("Error! Card number or PIN is invalid.\n");
}
} while ( cardNum != 1111 && pin != 2222 || cardNum != 3333 && pin != 4444 );
任何幫助表示贊賞。謝謝!
uj5u.com熱心網友回復:
您沒有正確組合條件。
通常更容易描述您想要匹配的條件,然后用一個!(...)圍繞它的單個來反轉整個事物。
do {
printf("Card number: ");
scanf("%d", &cardNum);
printf("PIN: ");
scanf("%d", &pin);
if (!(cardNum == 1111 && pin == 2222 || cardNum == 3333 && pin == 4444)) {
printf("Error! Card number or PIN is invalid.\n");
}
} while (!(cardNum == 1111 && pin == 2222 || cardNum == 3333 && pin == 4444));
如果您想在沒有包裝的情況下重寫它!(...),請參閱德摩根定律。您需要將其多次應用于每個級別的條件嵌套。結果將是:
if ((cardNum != 1111 || pin != 2222) && (cardNUm != 1111 || pin != 4444))
當這樣寫時,很難說出這實際上試圖匹配什么。
并且為了避免兩次寫入條件,請使用while(1)回圈而不是do-while,并在輸入有效時中斷。
while (1) {
printf("Card number: ");
scanf("%d", &cardNum);
printf("PIN: ");
scanf("%d", &pin);
if (cardNum == 1111 && pin == 2222 || cardNum == 3333 && pin == 4444) {
break;
}
printf("Error! Card number or PIN is invalid.\n");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/409577.html
標籤:
上一篇:表格,條件格式
