输入一串字符来进行密码检测

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

img

问题相关代码,请勿粘贴截图

int main(){
int s1,i;
int count1=0,count2=0;
int a[100];
scanf("%s",a);
for(i=1;a[i]!='#';i++){
if(a[i]>'0'&&a[i]<'9')
count1++;
else if(a[i]>'a'&&a[i]<'z'||a[i]>'A'&&a[i]<'Z')
count2++;
else printf("密码不合格"); break;
}
if(i<6) printf("密码不合格");
if(count1<2) printf("密码不合格");
else printf("密码合格");
return 0;
}

运行结果及报错内容

img

我想要达到的结果

img

供参考:

#include <stdio.h>
int main() 
{
    int i = 0, cnt1 = 0, cnt2 = 0;
    char a[100] = { 0 };
    while ((a[i] = getchar()) != '#') {
        if (a[i] >= '0' && a[i] <= '9')
            cnt1++;
        else if (a[i] >= 'a' && a[i] <= 'z' || 
                 a[i] >= 'A' && a[i] <= 'Z')
            cnt2++;
        i++;
    }
    if (i < 6 || cnt1 + cnt2 != i || cnt1 < 2)
        printf("密码不合法");
    else            
        printf("密码合法");
    return 0;
}

  1. for循环里面应该是i=0而不=1,否则第一位和末位检测不到

  2. for循环内的判断条件漏了=,这导致0,9a,z,A,Z检测不到,从而导致count1和count2出错

  3. 应该改为if(i≤5)

错误一大堆
1.索引从0开始,而不是1
2.判断时只判断大于小于,没有判断等于
3.不要在for循环里直接输出文字,而应该在后面统一输出
或者循环里输出文字后要调用return直接返回
你这样写,循环里输出一遍不合格,循环结束又输出一遍不合格,输出2遍