实验7 8996 错在哪里

img


#include 
#include 
#include 
int main()
{
    char a[50];
    while(scanf("%s",&a)!=EOF)
    {
        int n=0,i=0,j=0,k=0,m=0,g=0;
        for(i=0;a[i]!='\0';i++)
        {
            n++;
            if('A'<=a[i]&&a[i]<='Z')
            j=1;
            if('a'<=a[i]&&a[i]<='z')
            k=1;
            if('0'<=a[i]&&a[i]<='9')
            m=1;
            else
            g=1;
        }
        int w;
        w=j+k+m+g;
        if(w>=3&&n>=8)
        printf("Yes\n");
        else
        printf("No\n");
    }
    return 0;
}

基于Monster 组和GPT的调写:
两个问题:

  • 在读取输入时,使用%s格式化符号时不需要取地址符号&。因为数组名a表示数组的首地址,可以直接使用a代替,即scanf("%s", a)。
  • 在判断是否包含数字时,使用了if-else语句。这会导致当输入的字符是数字时,只有m被赋值为1,g还是0。因此需要使用if语句,即if('0'<=a[i]&&a[i]<='9') m=1;。

修改后的代码

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

int main()
{
    char a[50];
    while (scanf("%s", a) != EOF) {
        int n = strlen(a), i, j = 0, k = 0, m = 0, g = 0;
        for (i = 0; i < n; i++) {
            if ('A' <= a[i] && a[i] <= 'Z')
                j = 1;
            if ('a' <= a[i] && a[i] <= 'z')
                k = 1;
            if ('0' <= a[i] && a[i] <= '9')
                m = 1;
            if (!(('A' <= a[i] && a[i] <= 'Z') || ('a' <= a[i] && a[i] <= 'z') || ('0' <= a[i] && a[i] <= '9')))
                g = 1;
        }
        int w = j + k + m + g;
        if (w >= 3 && n >= 8)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}


添加了一个判断,如果密码中不包含大小写字母和数字以外的字符,则g也会被赋值为1。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^