首页 > 解决方案 > 关于字符的 C 程序

问题描述

/编写程序检查密码是否包含大写字母、数字和特殊符号。(我已经提供了我所做的,但我没有得到所需的输出。需要解释我在哪里搞砸了。) /

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

标签: c

解决方案


这是您问题的完整解决方案。

您需要创建一个定义特殊字符的函数。

此外,您需要将密码读取为字符串,然后将每个字符与您的密码规则进行比较。

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

推荐阅读