修改为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");
}