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语言如何制作简易金山打字通功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
目录
推荐阅读
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~