Problem Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3 12ajf fi8x_a ff ai_2
Sample Output
no yes no// C语言合法标识符 #include<stdio.h> main() { int n,i,j; char s[50]; scanf("%d",&n); getchar(); //多次wa原因:getchar()的位置 while(n--){//getchar()放这里就是错的 j=0; gets(s); if(s[0]>='a'&&s[0]<='z'||s[0]>='A'&&s[0]<='Z'||s[0]=='_'){ for(i=0;s[i]!='\0'&&j==0;i++){ if(!(s[i]>='0'&&s[i]<='9'||s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'||s[i]=='_')) j=1; } if(j==1) printf("no\n"); else printf("yes\n"); } else printf("no\n"); } } //补充: //(1).标识符只能由字母、数字和下划线三类字符组成 //(2).第一个字符必须是字母(第一个字符也可以是下划线,但被视作系统自定义的标识符) //(3).大写字母和小写字母被认为是两个不同的字符,如A和a是两个不同的标识符 //(4).标识符可以任意长,但只有前32位有效。有些旧的C版本对外部标识符的限制为6位。这是由于链接程序的限制所总成的,而不是C语言本身的局限性 //(5).标识符不能是C的关键字 关键字 auto 声明自动变量 short 声明短整型变量或函数 int 声明整型变量或函数 long 声明长整型变量或函数 float 声明浮点型变量或函数 double 声明双精度变量或函数 char 声明字符型变量或函数 struct 声明结构体变量或函数 union 声明共用数据类型 enum 声明枚举类型 typedef 用以给数据类型取别名 const 声明只读变量 unsigned 声明无符号类型变量或函数 signed 声明有符号类型变量或函数 extern 声明变量是在其他文件正声明 register 声明寄存器变量 static 声明静态变量 volatile 说明变量在程序执行中可被隐含地改变 void 声明函数无返回值或无参数,声明无类型指针 if 条件语句 else 条件语句否定分支(与 if 连用) switch 用于开关语句 case 开关语句分支 for 一种循环语句 do 循环语句的循环体 while 循环语句的循环条件 goto 无条件跳转语句 continue 结束当前循环,开始下一轮循环 break 跳出当前循环 default 开关语句中的“其他”分支 sizeof 计算数据类型长度 return 子程序返回语句(可以带参数,也可不带参数)循环条件
为什么这里没考虑关键字= =getchar ()的位置(注意是循环里还是循环外)