C программой на Персонажи - PullRequest
       0

C программой на Персонажи

0 голосов
/ 22 декабря 2018

/ Напишите программу для проверки пароля, если она имеет заглавную букву, цифру и специальный символ.(Я предоставил то, что я сделал, и я не получаю вывод, как требуется. Нужно объяснить, где я все испортил.) /

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

int main()
{
  int i;
  int tuna;
  do 
  {
    printf("Enter a password:%c \n", tuna);
    scanf(" %c", &tuna);

  } while( tuna != (isupper(tuna), isalpha(tuna), isdigit(tuna)) );


  return 0;
}

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

https://onlinegdb.com/rkuWbGhx4

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

#define PASSLENGTH 32

char *readpass(void)
{
    int c;

    static char password[PASSLENGTH];
    size_t len = 0;

    while((c = getch()) != '\n')
    {
        if(c < 32 || c > 127)
        {
            continue;
        }
        else
        {
            if(len == PASSLENGTH -1) continue;
            password[len++] = c;
            printf("*");
        }
    }
    password[len] = 0;
    return password;
}

int isspecial(int c)
{
    return !!strchr("*&^%$#()@!", c);
}

int checkpass(const char *pass)
{
    int digits = 0, upper = 0, special = 0;; 
    while(*pass)
    {
        digits |= isdigit(*pass);
        upper |= isupper(*pass);
        special |= isspecial(*pass);
        pass++;
    }
    return digits && upper && special;
}

int main()
{
    char *password;
    int result;

    do
    {
        password = readpass();
        result = checkpass(password);

        if(!result) printf("\nWrong password\n");
    }while(!result);

    printf("\nYour password is: %s\n", password);
    return 0;
}
0 голосов
/ 22 декабря 2018

Вот полное решение для вашего вопроса.

Вам нужно было создать функцию, которая определяет специальный символ.

Кроме того, вам нужно было прочитать пароль в виде строки, чтобы затем сравнитькаждый символ против вашего пароля правил.

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

bool isspecial(char c)
{
    return ((c >= 0x21) && (c <= 0x2F)) ||
           ((c >= 0x3A) && (c <= 0x40)) ||
           ((c >= 0x5B) && (c <= 0x60)) ||
           ((c >= 0x7B) && (c <= 0x7E));
}

int main(void)
{
    bool contains_upper = false;
    bool contains_digit = false;
    bool contains_special = false;

    int i = 0;

    char tuna[65] = { 0x00 }; // password max length is 64 chars

    printf("Enter a password: ");
    fgets(tuna, 64, stdin);

    tuna[strlen(tuna) - 1] = 0x00;

    while (i < strlen(tuna))
    {
        if (isupper(tuna[i]))
        {
            contains_upper = true;
        }

        if (isdigit(tuna[i]))
        {
            contains_digit = true;
        }

        if (isspecial(tuna[i]))
        {
            contains_special = true;
        }

        i++;
    }

    if (contains_upper && contains_digit && contains_special)
    {
        printf("Password is ok\n");
    }
    else
    {
        printf("Password is not ok\n");
    }

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