多条件输入验证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");
}