1164: 零起点学算法71——C语言合法标识符(存在问题)

时间:2023-12-25 19:03:07

1164: 零起点学算法71——C语言合法标识符

Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld
Submitted: 1080  Accepted: 484
[Submit][Status][Web Board]

Description

输入一个字符串,判断其是否是C的合法标识符。

Input

输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。

Output

对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。

Sample Input 1164: 零起点学算法71——C语言合法标识符(存在问题)

3
12ajf
fi8x_a
ff ai_2

Sample Output

no
yes
no

HINT

请注意编译器的差异,可以使用TEST功能获得帮助。

Source

 #include<stdio.h>
#include<ctype.h>
int main(){
int n;
char a[];
scanf("%d%*c",&n);
while(n--){
int d=;
gets(a);
if(a[]!='_'&& !isalpha(a[])){
printf("no\n");
}
else{
for(int j=;a[j]!='\0';j++){
if(a[j]!='_'&&!isalnum(a[j])){ printf("no\n");
break;
}
else{
printf("yes\n");
break;
}
}
}
}
return ;
}

//按理来说,跳出第一层循环后不会输出yes 为什么会有这种情况

1164: 零起点学算法71——C语言合法标识符(存在问题)

AC代码:

 #include<stdio.h>
#include<ctype.h>
int main(){
int n;
char a[];
while(scanf("%d%*c",&n)!=EOF){
while(n--){
int d=;
gets(a);
if(a[]!='_'&& !isalpha(a[])){
printf("no\n");
}
else{
for(int j=;a[j]!='\0';j++){
if(a[j]!='_'&&!isalnum(a[j])){ d=;
break;
}
}
puts(d ? "yes" : "no");
}
}
}
return ;
}