一款不错的练习打字的小游戏,并且可以用来学英语,一举两得,何乐而不为之呢。然后问题就来了,打字的时候总会按错字母,我想知道我的命中率,即按对的字母数比上总的字母数,听说你是编程高手,希望你帮我算一下。
输入
一组输入。第一行一个正整数N(N < 100)。代表要出现的单词总数。接下来是N行,每行一个单词,单词长度不超过20,只有英文字母或*组成,其中*代表曾经按错过的地方。
输出
只有一行。一个实数,命中率。结果保留2位有效数字。
示例输入
6 y**ou ar*e a v**ery goo**d programmer
示例输出
0.78
View Code
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int n, i, k, t=0, s=0 ; 6 char str[21] ; 7 scanf("%d", &n) ; 8 getchar() ;//注意 9 while(n--) 10 { 11 gets(str) ; 12 k = strlen(str) ; 13 s = s + k ;//注意s是字符串的总长度 14 for(i = 0 ; i < k ; i++) 15 if(str[i] == '*') 16 t++ ; 17 } 18 printf("%.2f\n", 1-(float)t/s) ; 19 return 0 ; 20 }
总结:strlen只能用char*做参数,且必须是以''\0''结尾的。strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。
在C语言中有个重要的库函数getchar(),可从终端获得一个字符的ASCII码值。在终端输入字符时并非输入一个字符就会返回,而是在遇到回车换行前,所有输入的字符都会缓冲在键盘缓冲器中,直到回车换行一次性将所有字符按序依次赋给相应的变量,在这里一定要注意最后一个字符即'\n',该字符也会赋给一个相应的变量(当然这要你定义的用来接收字符的变量数比你输入的可见字符多一才可以)。