请问为什么明明很简单的C语言代码 strlen函数计算字符个数出了问题

第一行输入N表示字符串个数
接下来N行分别输入字符串
输出结果要求判断每行字符串安全系数
如果字符个数小于6,输出not safe
如果字符有一种,输出not safe
如果字符有两种,输出medium safe
如果有三种以上字符,输出safe

调试的时候发现 输入 1aB 时计算的字符个数是2,但是不知道哪里出了问题。
求大佬指点。

#include<stdio.h>
#include<string.h>
void check(char ch[]);
int main()
{
int N,i;
scanf("%d",&N);
char ch[30]={'\0'};
for(i=0;i<N;i++)
{
scanf("%s",&ch);
check(ch);
}
}

void check(char ch[])
{
int i=0;
int j=strlen(ch);//j为字符个数
if(j<6)
{
printf("Not Safe\n");
}
else
{
int x=0,s[4]={0,0,0,0};//判断字符种类
for(i=0;ch[i]!='\0';i++)
{
if(ch[i]>='a'&&ch[i]<='z')
{
s[1]=1;
}
else if(ch[i]>='A'&&ch[i]<='Z')
{
s[2]=1;
}
else if(ch[i]>='0'&&ch[i]<='9')
{
s[3]=1;
}
else s[0]=1;
}
for(i=0;i<4;i++)
{
x+=s[i];
}
if(x==1)
{
printf("Not Safe\n");
}
if(x==2)
{
printf("Medium Safe\n");
}
if(x>=3) printf("Safe\n");
}
}

scanf("%s",ch);
不要&符号