这个题我自己写的不对,在群里问的大佬,代码和解释如下:
代码:
#include<stdio.h>
#include<string.h>
#define TRUE 1
#define FASLE 0
int is(char c)
{
if(((c>='0')&&(c<='9'))||((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z'))||(c=='_'))
{
return TRUE;
}else
{
return FASLE;
}
}
int main()
{
int n;
scanf("%d",&n);
while(n>=1){
char a[50]={'\0'};
int flag=1;
char b=getchar();
scanf("%[^\n]",a);
for(int i=0;i<strlen(a);i++)
{
if(is(a[i])==0)
{
flag=0;
}
}
if(a[0]>='0'&&a[0]<='9')
{
flag=0;
}
if(flag==0)
{
printf("no\n");
}else
{
printf("yes\n");
}
n--;
}
return 0;
}
解释如下:
注:%[^\n]接收字符串,接收到空格不结束,接收到回车结束(对比:%s[^\n]接收到空格或回车都会结束)
本人自己修改后的代码也加上吧,嘿嘿嘿
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,flag;
char str[50],ch;
while(~scanf("%d",&n))
{
while(n--)
{
getchar();
scanf("%[^\n]",str);
flag = 1;
ch = str[0];
if((ch == '_') || ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')))
{
for(i = 1;i < strlen(str);i++)
{
ch = str[i];
if(((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || ((ch >= '0') && (ch <= '9')) || (ch == '_'))
{
}
else
flag = 0;
}
}
else
flag = 0;
if(flag)
printf("yes\n");
else
printf("no\n");
}
}
return 0;
}