多条件输入验证C程序
Input validation of multiple conditions C Program
我正在创建一个银行程序,用户可以在其中输入卡号和密码,我正在尝试验证他们的输入。它适用于验证一个卡号和密码,但不适用于多个卡号和密码。
代码如下:
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 );
感谢任何帮助。谢谢!
您没有正确组合条件。
通常更容易描述您想要匹配的条件,然后用一个 !(...)
围绕它反转整个事情。
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));
如果你想在不换行的情况下重写它 !(...)
,请参阅 de Morgan's Laws。您需要将它多次应用于每个级别的条件嵌套。结果将是:
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");
}
我正在创建一个银行程序,用户可以在其中输入卡号和密码,我正在尝试验证他们的输入。它适用于验证一个卡号和密码,但不适用于多个卡号和密码。
代码如下:
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 );
感谢任何帮助。谢谢!
您没有正确组合条件。
通常更容易描述您想要匹配的条件,然后用一个 !(...)
围绕它反转整个事情。
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));
如果你想在不换行的情况下重写它 !(...)
,请参阅 de Morgan's Laws。您需要将它多次应用于每个级别的条件嵌套。结果将是:
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");
}