判断c语言的合法标识符,但是不知道那出错了?

Description

输入一个字符串,判断其是否是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>
int main()
{
    int n;
    char c[50] = {'\0'};
    scanf("%d", &n);
    getchar();
    for (int i = 0; i < n; i++)
    {
        int j;
        gets(c);
        for ( j = 0; j <strlen(c) ; j++)
        {
            if (((c[j]>='a'&&c[j]<='z')||(c[j]>='A'||c[j]<='Z'))||(c[j]=='_')||(c[j]>='1'&&c[j]<='9'))
            {
                if (c[0]>='1'&&c[0]<='9')
                {
                    printf("no\n");
                    break;
                }
            }
            else
            {
                printf("no\n");
                break;
            }

        }
        if (j==strlen(c))
        {
            printf("yes\n");
        }
    }
    return 0;
}

#include <stdio.h>
int main()
{
   int n,i;
   char str[50];
   scanf("%d",&n);
   while(n--)
      {
         fflush(stdin);
         gets(str);//scanf不读空格
         int flag=1;
         for(i=0;str[i];i++)
            {
               if((i==0&&(str[i]>='0'&&str[i]<='9')) || (!((str[i]>='0'&&str[i]<='9') || (str[i]=='_') || (str[i]>='a'&&str[i]<='z') || (str[i]>='A'&&str[i]<='Z'))))
                  {
                     flag=0;
                     break;
                  }
            }
         printf(flag?"yes\n":"no\n");
      }
   return 0;
}