Как выйти из do-while l oop, когда программа была успешно завершена пользователем - PullRequest
1 голос
/ 09 февраля 2020

Я работал над программой, которая проверит пригодность пароля.

Чтобы пароль был приемлемым, он должен иметь как минимум: одну заглавную букву; один номер; и один знак доллара.

Моя программа выполняет проверку требований и определяет, подходит ли пароль к go или нет.

Барьер, который я сейчас имею, состоит в том, что Я пытался запустить программу до тех пор, пока:

  1. Пользователь не выйдет из программы, набрав «quit»;
  2. Или, если пользователь введет правильную форму требуемого пароля.

Чтобы запустить такой повторяющийся процесс, я решил использовать do-while l oop. Чтобы программа определила, что пора начинать работу, я использовал следующую команду:

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

К сожалению, моя программа по-прежнему работает , даже если пароль был верным.

Пожалуйста, дайте мне подсказку, как мне выйти из повторяющегося процесса, когда это хорошо для go.

// 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;
}

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Вы не можете сравнивать строки с passwordInput != "quit", вы должны использовать strcmp() и включать <string.h>. Также измените тест на passwordClearance, который кажется неправильным:

do {
    ...
} while (strcmp(passwordInput, "quit") != 0 || passwordClearance != 0);
1 голос
/ 09 февраля 2020

Чтобы программа определила, что пора начинать работу, я использовал следующую команду:

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

К сожалению, моя программа все еще работает, даже если пароль был верным.

С этим связаны две проблемы:

  1. Лог c неверен. Выражение while оценивается как true, вызывая цикл l oop, если либо компонентных реляционных выражений равно true. Таким образом, чтобы выйти из l oop, оба должны быть ложными. Вы хотите && вместо ||, чтобы l oop выходил, если любое из выражений ложно.

  2. passwordInput != "quit" всегда будет иметь значение true, потому что вы сравнивая два разных указателя. Чтобы сравнить содержимое массива passwordInput с содержимым массива, представленного "quit", следует использовать функцию strcmp().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...