找下异常啊

找下错误啊、、急急急急!!!!
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no


我的代码:
#include <stdio.h>
#include <string.h>
char a[64]="_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main()
{
int n,i,j,k,flag;
char str[55];
scanf("%d%*c",&n);
for(i=0;i<n;i++)
{
flag=0;
gets(str);
if( (str[0]>'A'&&str[0]<'Z') || (str[0]>'a'&&str[0]<'z') || (str[0]=='_'))
{
for(j=0;str[j]!='\0';j++)
for(k=0;k<63;k++)
if(str[j]!=a[k]){if(0==flag) flag=1; else flag=flag;}
}
else flag=1;
if(1==flag)printf("no\n");
if(0==flag)printf("yes\n");
}
return 0;
}

------解决方案--------------------
C/C++ code

#include <stdio.h>
#include <string.h>
char a[64]="_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main()
{
int n,i,j,k,flag;
char str[55];
scanf("%d%",&n);
for(i=0;i<n;i++)
{
    int flag=0; 
    gets(str);
    if( (str[0]>'A'&&str[0]<'Z') || (str[0]>'a'&&str[0]<'z') || (str[0]=='_'))
    {
        for(j=0;str[j]!='\0';j++)
        for(k=0;k<63;k++)
        if(str[j]==a[k]){++flag;}
    }
     if(strlen(str)!=flag)
     printf("no\n");
     else
     printf("yes\n");
     flag=0;
}
return 0;
}

------解决方案--------------------
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,j,k,flag;
char str[55];
scanf("%d",&n);
for(i=0;i<n;i++)
{
gets(str);
flag=0;
for(j=0;str[j-1]!='\n';j++)
{
if((str[j]>'A'&&str[j]<'Z')||(str[j]>'a'&&str[j]<'z')||(str[j]=='_'))
;
else 
{
flag=1;break;
}
}
if(1==flag)
printf("no\n");
if(0==flag)
printf("yes\n");
}
return 0;
}
------解决方案--------------------
ls还有点疏忽。
------解决方案--------------------
比较字符串时有逻辑上的错误
如你所写的话
for(j=0;str[j]!='\0';j++)
for(k=0;k<63;k++)
if(str[j]!=a[k]){if(0==flag) flag=1; else flag=flag;}

只能比较最后一个字符是否是你所限定的范围内的字符 前j-1次比较得到的结果都被最后一次的比较所覆盖了
------解决方案--------------------
条件不对
------解决方案--------------------
探讨

C/C++ code

#include <stdio.h>
#include <string.h>
char a[64]="_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main()
{
int n,i,j,k,flag;
char str[55];
scanf("%d%",&amp;n);
for……