可把初学者的我憋惨了,能告诉我个正确的做法或者我哪儿错了不😂

img

img

img

修改为if ... , else if ...,else if ..., else 结构,才可以把多个条件判断逻辑连接起来

#include <stdio.h>
#include <string.h>
int main()
{
    char m[81];
    char ch;
    int i=0;
    int  a, b, c, d, length;
    a=  b= c= d= length = 0;
    while ((ch=getchar()) != '#')
    {  
        if (ch >= '0' && ch <= '9')
        {
            a++;
        }
        else if (ch >= 'A' && ch <= 'Z')
        {
            b++;
        }
        else if (ch >= 'a' && ch <= 'z')
        {
            c++;
        }
        else
        {
            d++;
        }
        m[i++]=ch;
    }    
    m[i]='\0';
    length = i;   
    if (length < 10 || length > 16)
    {
        printf("NO");
        return 0;
    }    
    if (a > 0 && b > 0 && c > 0 && d > 0)
    {
        printf("YES");
    }
    else
        printf("NO");
    return 0;
}


1.你把你的代码直接贴上来这样会比较好调试。
2. 建议使用函数封装的方式来做,这样逻辑会比较清楚。
例如:
bool isOneToNine(const char c) ; // 是否包含1-9
bool isaToz(const char c); // 是否包含a-z
bool isAtoZ(const char c); // 是否包含A-Z
bool isOtherChar(const char c); // 是否包含特殊字符
bool isLength(const char [] str); // 长度是否符合要求
然后再整理逻辑.

// 假设str是你获取的字符串 char[]
// length 是字符串长度
if(!isLength(str))
{
printf("no");
  return 0;
}
bool a = false,b= false,c= false,d= false;
for(int i = 0 ; i < length;i++)
{
  a = isOneToNine(str[i]);
b = isaToz(str[i]);
c = isAtoZ(str[i]);
d = isOtherChar(str[i]);
}
if(a && b && c && d)
{
  printf("yes");
}
else{
printf("no");
}