C语言如何制作简易金山打字通功能

小编给大家分享一下C语言如何制作简易金山打字通功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

本小项目最终的实现如下:

输入相应的字符,然后在最下面能够统计错误的个数,输入字符总个数,输入个数以及错误率。

C语言如何制作简易金山打字通功能

C语言如何制作简易金山打字通功能

那如何来实现这个小项目呢?规划如下,我们需要大致实现以下三个模块:

  • (1)输入模块

  • (2)显示模块

  • (3)统计模块

实现过程:

使用getch()函数可以获取键盘输入的字符,显示可以使用Window自带的API来实现,统计就很简单了,就是计算输入字符的个数等等。。。接下来就是简单的软件逻辑的实现。

源码如下:

#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include<unistd.h>
#include<conio.h>
#defineNR(x)sizeof(x)/sizeof(x[0])
//清屏
#defineClearScreen()\
system("cls");
#defineTITLE"金山打字通"
enum
{
LEFT=1,
RIGHT,
BACKSPACE,
ESC,
Char,
};
enumKEYBOARD
{
ESC_KEY=27,
BACKSPACE_KEY=8,
LEFT_KEY=75,
RIGHT_KEY=77
};
intiindex=0;
intmax=0;
staticintcount=0;
charbuffer[1024]={0};
intGet_User_input(HANDLEhOut,char*ch);
voidShow_string(HANDLEhOut,constchar*text);
//窗口初始化
voidHANDLE_init(HANDLEhOut);
//定义设置光标结构体变量
CONSOLE_CURSOR_INFOcci;
//定义默认的坐标位置
COORDpos={0,0};
intmain(void)
{
char*text="WelCometoSchool...GoodGoodWork,DayDayUp!";
charch;
intret;
HANDLEhOut;
hOut=GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE_init(hOut);
printf("\n%s\n",text);
Show_string(hOut,text);
while(1)
{
if(max>=strlen(text))
break;
ret=Get_User_input(hOut,&ch);
if(ret==ESC)
break;
Show_string(hOut,text);
}
//关闭窗口句柄
CloseHandle(hOut);
return0;
}
//窗口初始化
voidHANDLE_init(HANDLEhOut)
{
SetConsoleTitleA(TITLE);
//获取当前的句柄---设置为标准输出句柄
//获取光标信息
GetConsoleCursorInfo(hOut,&cci);
//设置光标大小
pos.X=0;
pos.Y=2;
cci.dwSize=1;
//设置光标不可见FALSE
cci.bVisible=0;
//设置(应用)光标信息
SetConsoleCursorInfo(hOut,&cci);
}
staticint__Get_User_input(HANDLEhOut,char*ch)
{
chartmp;
inttype=Char;
//关闭回显
pos.X=0;
pos.Y=2;
GetConsoleCursorInfo(hOut,&cci);
cci.dwSize=100;
cci.bVisible=0;
SetConsoleCursorInfo(hOut,&cci);
tmp=getch();
switch(tmp)
{
caseESC_KEY:type=ESC;break;
caseBACKSPACE_KEY:type=BACKSPACE;break;
caseLEFT_KEY:type=LEFT;break;
caseRIGHT_KEY:type=RIGHT;break;
}
*ch=tmp;
//打开回显
pos.X=0;
pos.Y=2;
GetConsoleCursorInfo(hOut,&cci);
cci.dwSize=100;
cci.bVisible=1;
SetConsoleCursorInfo(hOut,&cci);
returntype;
}
//获取用于输入
intGet_User_input(HANDLEhOut,char*ch)
{
inttype;
type=__Get_User_input(hOut,ch);
switch(type)
{
caseChar:
if(buffer[iindex]=='\0')
buffer[iindex]=*ch;
else
{
memmove(buffer+iindex+1,buffer+iindex,max-iindex);
buffer[iindex]=*ch;
}
iindex++;max++;break;
//caseLEFT:if(iindex>0)iindex--;break;
//caseRIGHT:if(iindex<max)iindex++;break;
caseBACKSPACE:
if(iindex>0){
memmove(buffer+iindex-1,buffer+iindex,max-iindex);
iindex--;
max--;
}
if(iindex==0)
{
count=0;
}
break;
caseESC:returnESC;
}
return0;
}
//显示和统计
voidShow_string(HANDLEhOut,constchar*text)
{
system("cls");
printf("\n%s\n",text);
inti;
interrno_Num=0;
for(i=0;i<max;i++)
{
if(buffer[i]==text[i])
{
SetConsoleTextAttribute(hOut,FOREGROUND_GREEN|0x8);
printf("%c",buffer[i]);
}
else
{
SetConsoleTextAttribute(hOut,FOREGROUND_RED|0x8);
printf("%c",buffer[i]);
errno_Num++;
}
}
pos.X=0;
pos.Y=2;
cci.dwSize=100;
cci.bVisible=1;
SetConsoleCursorPosition(hOut,pos);
SetConsoleCursorInfo(hOut,&cci);
SetConsoleTextAttribute(hOut,FOREGROUND_GREEN|0x8);
pos.X=0;
pos.Y=15;
SetConsoleCursorPosition(hOut,pos);
printf("错误的个数:%d",errno_Num);
pos.X=0;
pos.Y=16;
SetConsoleCursorPosition(hOut,pos);
printf("总个数:%d",(int)strlen(text));
pos.X=0;
pos.Y=17;
SetConsoleCursorPosition(hOut,pos);
printf("输入个数:%d",max);
pos.X=0;
pos.Y=18;
SetConsoleCursorPosition(hOut,pos);
if(count==0)
printf("错误率:0%%");
else
printf("错误率:%.2f%%",((float)errno_Num)/((float)max)*100);
pos.X=iindex+1;
pos.Y=2;
cci.dwSize=100;
cci.bVisible=1;
count=1;
SetConsoleCursorPosition(hOut,pos);
SetConsoleCursorInfo(hOut,&cci);
fflush(stdout);
}

以上是“C语言如何制作简易金山打字通功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-06-13 23:19:56
收藏
分享
海报
0 条评论
184
上一篇:C语言如何实现医院管理系统 下一篇:springboot中利用全局异常处理怎么实现登录注册验证
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码