m0_70029950 2022-06-14 19:50 采纳率: 79.2%
浏览 47
已结题

关于ASCII码的问题

问题遇到的现象和发生背景

题目是这样的:
某网站规定注册账号时密码必须达到一定强度才可以。他们规定密码长度至少6位,数字、大写字母、小写字母、符号(~!@#$%^&*()[]}{|<>?/.,:"';)这四类中至少包含三类才合格。现在请你写一段程序来判断一个密码是否合格。

输入格式:
第一行为一个整数n(0<n<10),代表测试用例组数,
后边是n行测试用例,每行为一个长度不超过30的字符串。

输出格式:
共n行,与输入的n行测试用例相对应,如果密码合格则输出yes,否则输出no。

输入样例:
2
123456
Hello2020.
输出样例:
no
yes
我敲的代码不符合题目要求,我认为是比较部分出现问题,但我不知道该怎么改

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
    int n,i,j,a=0,b=0,e=0,d=0,l;
    char c[30];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",&c);
    }
    for(i=0;i<n;i++)
    {
        a=0;b=0;e=0;d=0;
        for(j=0;j<30;j++)
        {
            if(c[j]>=48&&c[j]<=57)
            {
                a=1;
            }
            if(c[j]>=65&&c[j]<=90)
            {
                b=1;
            }
            if(c[j]>=97)
            {
                d=1;
            }
            if(c[j]>=33&&c[j]<=47)
            {
                e=1;
            }
        }
        if((a+b+e+d)>=3)
        {
            printf("yes\n");
        }
        else
        {
            printf("no\n");
        }
    }
    return 0;
}

运行结果及报错内容

img

我想要达到的结果

我期望输出:
no
yes

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-06-15 13:08
    关注

    题主的代码修改如下,见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    int main()
    {
        int n, i, j, a = 0, b = 0, e = 0, d = 0, l;
        char c[30];
        scanf("%d", &n);
        for (i = 0; i < n; i++)
        {
            scanf("%s", c); //scanf("%s", &c);  修改
            getchar();
         //}修改 移动到最后  修改
            a = 0; b = 0; e = 0; d = 0; //这句移动到这   修改
            for (j = 0; j < strlen(c); j++)  //for (i = 0; i < n; i++)  修改
            {
                //a = 0; b = 0; e = 0; d = 0;  修改
                //for (j = 0; j < 30; j++)   修改
                //{      修改
                    if (c[j] >= 48 && c[j] <= 57)
                    {
                        a = 1;
                    }
                    if (c[j] >= 65 && c[j] <= 90)
                    {
                        b = 1;
                    }
                    if (c[j] >= 97)
                    {
                        d = 1;
                    }
                    if (c[j] >= 33 && c[j] <= 47)
                    {
                        e = 1;
                    }
            }
            if ((a + b + e + d) >= 3)
            {
                printf("yes\n");
            }
            else
            {
                printf("no\n");
            }
            //}  修改
        } // 第一个for() 需包含到这 修改
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 创建了问题 6月14日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探