easy-type是一个简易的打字练习软件,它是用C语言编写的。
一,编写这个软件的原因:
想在linux系统终端窗口下或者虚拟终端下使用中文打字练习软件,但是没有找到一个好用的,因此就编写了这个简易的
中文打字练习软件。
二,下面是这个软件的C语言源程序
该软件放在了CU论坛上了,下载网址是:
#include
#include
#include
#include
#define N 20
int type; //用来判断字符是半角还是全角
/* 2013-12-6 version 1 .0 auther shencz2000
english.txt 文件是英文,里面都是半角英文字母和字符。
chinese.txt 文件中的文字都是汉字和全角标点符号。
mydrill.txt 文件中的文字都是汉字和全角标点符号。
这些文件每一行都不能超过80个半角字符或者40个全角字符。
将其中一个文件的文本按行读到数组中来,最多只能读取 N 行。*/
int main (void)
{
int select_file (char filename[]);
int type_drilling (char array[][150]);
FILE * fp;
char array[N][150], fname[20];
int i=0,j;
system ("clear"); //清理屏幕
select_file (fname);
if ((fp=fopen(fname,"r"))==NULL)
{
printf ("can't open file!\n");
exit (0);
}
while (i
array[i][0]='\0'; //对序号为i的那一行进行处理,避免出现乱码
type_drilling (array);
fclose (fp);
return 0;
}
int type_drilling (char array[][150]) //打字练习函数
{
int right_words (char * p, char * string);
int i=0,j=0,k=0,m,n,s=0,t;
time_t start,stop;
float time_used, speed, rightw=0;
char * p, string[150]={"start drilling"};
while ( i < N && strlen (array[i]) != 0)
{
p=array[i];
j=0;
while (j<3 && rightw<90 && strcmp(string, "quit")!=0)
{
printf (" %s ",p);
s++;
time (& start);
//下面的两条语句是将输入保存到1维字符数组里
for (k=0; (string[k] = getchar()) != '\n'; k++) ;
string[k]='\0';
time (& stop);
time_used=difftime (stop, start);
m=strlen(p)-1; //该字符串包括换行符,因此字符串长度要减 1
if (type >0)
{ k=k/3; m=m/3;} //一个汉字的utf8编码是3个字节
n=right_words(p,string); //调用统计正确的字数的函数
speed=60*k/(time_used+0.1); // +0.1是为了避免出现分母太小的情况
//printf ("the words:%d, right words:%d\n",m,n);
if (m > 0) rightw=n*100/m;
else rightw=100;
printf (" Speed:%5.0f, right ratio:%5.0f \n\n",speed,rightw);
j++;
s+=3;
}
if (s > 17)
{
s=0;
system ("clear"); //执行清屏指令
printf (" speed:%5.0f, right ratio:%5.0f \n\n",speed,rightw);
}
rightw=0;
if(i
}
return 0;
}
int select_file (char filename[]) //选择哪一个文件
{
int i,k;
char array[3][20]={"english.txt","chinese.txt","mydrill.txt"};
printf (" Please input 1 , 2 or 3 to select a file for drilling.\n");
for (i=0; i<3; i++)
printf (" %d file name is: %s\n",(i+1),array[i]);
printf (" ");
scanf ("%d",&k);
getchar(); //接收一个字符,在这里是接收一个换行符
system ("clear"); //清理屏幕
if (k<1 || k>3)
{
printf ("\n The number is wrong, so the first file is used\n");
k=1;
}
strncpy(filename,array[k-1],20);
type=k-1; // 0代表英文半角字符, >0代表中文全角字符.
printf ("\n");
return 0;
}
int right_words (char * p, char * string) //统计打字正确的字数,对于英文来说则统计字符数
{
int i,k=0,r,s,t=0;
r=strlen(p);
s=strlen(string);
if (s>r) s=r;
if (type==0) //如果是英文半角字符
{
for (i=0; i
if (*p++ == *string++) k++;
}
else //如果是中文全角字符
{
for (i=0; i
{
if (*p++ == *string++) t++;
if (t == 3) k++;
if ((i+1)%3 == 0) t=0;
}
}
return k;
}
三,使用说明
1,这个软件包括如下这几个文件:
README.txt 这个软件的使用说明文件
easy-type 可执行文件,使用如下命令生成的:
gcc -o easy-type easy-teype.c
easy-type.c 这个软件的C语言源文件
english.txt 英文打字练习文本文件
chinese.txt 中文打字练习文本文件
mydrill.txt 中文打字练习文本文件
2,下面3个文本文件,使用者可以编辑,但是有以下几点要求:
(1),english.txt文件是英文,里面都是半角英文字母和字符。
chinese.txt文件中的文字都是汉字和全角标点符号。
mydrill.txt文件中的文字都是汉字和全角标点符号。
(2),这些文件每一行都不能超过80个半角字符或者40个全角字符。
(3),将其中一个文件的文本按行读入,最多只能读取 20行。
3,软件的文件使用tar进行了打包。(但是在这个博客上不能发附件,因此没有上传压缩文件。)
因此,先下载压缩文件easy-type.tar.gz,接着在某一个目录下使用如下命令进行解压缩:
tar -zxv -f easy-type.tar.gz
解压缩以后,会看到一个easy-type子目录,这个目录里有上面所说的几个文件。
easy-type是在centos 5.x环境下编译生成的,如果你也是使用centos 5.x,
你可以试一下这个可执行文件。
如果你使用其它的linux操作系统或者unix操作系统,请你自行编译,编译命令如
前面所示。如果你的操作系统上没有gcc,你需要先安装它。如果你的操作系统带
有yum程序,你可以使用下面的命令来安装gcc:sudo yum install gcc 。如果这
种方法不行,你可以使用root用户标识来安装:su - ; yum install gcc 。
这个C语言源程序,还没有在window下进行编译过。因此请不要直接在window
下使用它。
4,先这个软件的目录下,接着可以在命令行下使用如下命令这运行这个程序:
./easy-type。程序开始会提示你练习那一个文本文件,你可以通过输入
1,或者2,或者3来进行选择。在练习过程中,如果你想退出,可以在一个新行
下输入:quit四个英文字母,接着按回车。
四,这个软件的已知的问题:
1,运行这个程序,在练习过程中输入一串中文,当你想删除一个已经输入的汉
字时候,光标在屏幕上显示删除了半个汉字,但实际上删除了一个汉字。
阅读(3183) | 评论(0) | 转发(0) |