1

我一直在开发一个检查密码是否合格的程序。

为了使密码符合条件,它至少需要: 一个大写字母;一个号码;和一个美元符号。

我的程序会检查要求并确定密码是否可以使用。

我现在遇到的障碍是我试图让程序运行到:

  1. 用户输入“quit”退出程序;
  2. 或者,如果用户键入正确形式的所需密码。

为了运行这样一个重复的过程,我决定使用 do-while 循环。为了让程序确定是时候爆发了,我使用了以下命令:

do {...} while (passwordInput != "quit" || passwordClearance != 1);

不幸的是,即使密码正确,我的程序仍然运行。

请给我一个线索,我该如何摆脱重复的过程。

// challenge: 
// build a program that checks when user enters a password for an uppercase letter, a number, and a dollar sign.
// if it does output that password is good to go.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char passwordInput[50];
    int digitCount = 0;
    int upperCharacterCount = 0;
    int dollarCount = 0;
    int passwordClearance = 0;

    do {
        printf("Enter you password:\n");
        scanf(" %s", passwordInput);

        for (int i = 0; i < strlen(passwordInput); i++) {
            if (isdigit(passwordInput[i])) {
                digitCount++;
                //continue;
            } else
            if (isupper(passwordInput[i])) {
                upperCharacterCount++;
                //continue;
            } else
            if (passwordInput[i] == '$') {
                dollarCount++;
                //continue;
            }
        }

        if ((dollarCount == 0) || (upperCharacterCount == 0) || (digitCount == 0)) {
            printf("Your entered password does not contain required parameters. Work on it!\n");
        } else {
            printf("Your entered password is good to go!\n");
            passwordClearance = 1;
        }
    } while (passwordInput != "quit" || passwordClearance != 1);

    return 0;
}
4

2 回答 2

1

为了让程序确定是时候爆发了,我使用了以下命令:

do{...} while(passwordInput != "quit" || passwordClearance != 1);

不幸的是,即使密码正确,我的程序仍然运行。

这样做有两个问题:

  1. 逻辑是错误的。如果任一组件关系表达式的计算结果为真while,则表达式计算结果为真,从而导致循环循环。因此,要退出循环,两者都必须为假。如果其中一个表达式为假,您想要而不是这样循环退出。&&||

  2. passwordInput != "quit"将始终评估为 true,因为您正在比较两个不同的指针。要将数组的内容与 表示的数组的内容进行比较,您应该使用该函数。passwordInput"quit"strcmp()

于 2020-02-09T20:28:34.683 回答
1

您不能将字符串与 进行比较passwordInput != "quit",您必须使用strcmp()并包含<string.h>。还要更改passwordClearance似乎不正确的测试:

do {
    ...
} while (strcmp(passwordInput, "quit") != 0 || passwordClearance != 0);
于 2020-02-09T20:29:34.420 回答