c语言一道题目,求大神指出代码哪里不对

图片说明

#include<stdio.h>
#include<string.h>
int main()
{
    char a[10][50];
    char j[20];
    int n,i=0,k=0,l=0;
    scanf("%d",&n);
    for(i;i<n;i++)
    {
        scanf("%s",a[i]);
    }
    for(i=0;i<n;i++)
    {
        if(strlen(a[i])<=31)//31长度 
        {
            for(;k<strlen(a[i]);k++)
            {
                if(k==0)
                {
                    if((a[i][k]=='_')||(a[i][k]>='A'&&a[i][k]<='Z')||(a[i][k]>='a'&&a[i][k]<='z')){j[i]='yes';}
                    else{j[i]='n';break;}
                }
                else if(k>0)
                {
                    if((a[i][k]=='_')||(a[i][k]>='A'&&a[i][k]<='Z')||(a[i][k]>='a'&&a[i][k]<='z')||(a[i][k]>='0'&&a[i][k]<='9')){j[i]='y';}
                    else{j[i]='n';break;}
                }
            }
        }
        else
        {
            j[i]='n';break;
        } 
    }
        for(l;l<i;l++)
    {
        if(j[l]=='y')
        {
            printf("yes\n");
        }
        else if(j[l]=='n')
        {
            printf("no\n");
        }
    }
    return 0;
}