真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言如何制作簡易金山打字通功能

小編給大家分享一下C語言如何制作簡易金山打字通功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)建站專注于夷陵企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。夷陵網(wǎng)站建設(shè)公司,為夷陵等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

本小項目最終的實現(xiàn)如下:

輸入相應(yīng)的字符,然后在最下面能夠統(tǒng)計錯誤的個數(shù),輸入字符總個數(shù),輸入個數(shù)以及錯誤率。

C語言如何制作簡易金山打字通功能

C語言如何制作簡易金山打字通功能

那如何來實現(xiàn)這個小項目呢?規(guī)劃如下,我們需要大致實現(xiàn)以下三個模塊:

  • (1)輸入模塊

  • (2)顯示模塊

  • (3)統(tǒng)計模塊

實現(xiàn)過程:

使用getch()函數(shù)可以獲取鍵盤輸入的字符,顯示可以使用Window自帶的API來實現(xiàn),統(tǒng)計就很簡單了,就是計算輸入字符的個數(shù)等等。。。接下來就是簡單的軟件邏輯的實現(xiàn)。

源碼如下:

#include 
#include 
#include 
#include 
#include 
#define NR(x) sizeof(x)/sizeof(x[0])
//清屏
#define ClearScreen() \
   system("cls");
#define TITLE "金山打字通"  
enum
{
 LEFT = 1 ,
 RIGHT ,
 BACKSPACE ,
 ESC ,
 Char,
};
enum KEYBOARD
{
 ESC_KEY = 27,
 BACKSPACE_KEY = 8 ,
 LEFT_KEY = 75 ,
 RIGHT_KEY = 77
};
int iindex = 0 ;
int max = 0 ; 
static int count = 0 ;
char buffer[1024] = {0} ;
int Get_User_input(HANDLE hOut,char *ch) ;
void Show_string(HANDLE hOut,const char *text) ;
//窗口初始化
void HANDLE_init(HANDLE hOut);
//定義設(shè)置光標結(jié)構(gòu)體變量
CONSOLE_CURSOR_INFO cci; 
//定義默認的坐標位置  
COORD pos = {0,0};
int main(void)
{
 char *text = "WelCome to School ... Good Good Work ,Day Day Up !" ;
 char ch ;
 int ret ;
 HANDLE hOut;
 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);
 }
 //關(guān)閉窗口句柄
 CloseHandle(hOut);
 return 0 ;
}
//窗口初始化
void HANDLE_init(HANDLE hOut)
{
 SetConsoleTitleA(TITLE);
 //獲取當前的句柄---設(shè)置為標準輸出句柄 
  //獲取光標信息
  GetConsoleCursorInfo(hOut, &cci); 
 //設(shè)置光標大小  
 pos.X = 0 ; 
 pos.Y = 2 ;
  cci.dwSize = 1; 
 //設(shè)置光標不可見 FALSE  
  cci.bVisible = 0; 
  //設(shè)置(應(yīng)用)光標信息
  SetConsoleCursorInfo(hOut, &cci);
}
static int __Get_User_input(HANDLE hOut,char *ch) 
{
 char tmp ;
 int type = Char ;
 //關(guān)閉回顯 
 pos.X = 0 ; 
 pos.Y = 2 ;
 GetConsoleCursorInfo(hOut, &cci); 
 cci.dwSize = 100; 
  cci.bVisible = 0;
 SetConsoleCursorInfo(hOut, &cci); 
 tmp = getch() ;
 switch(tmp)
 {
 case ESC_KEY : type = ESC ; break ; 
 case BACKSPACE_KEY : type = BACKSPACE ; break ;
 case LEFT_KEY : type = LEFT ; break ; 
 case RIGHT_KEY : type = RIGHT; break ;
 }
 *ch = tmp ;
 //打開回顯 
 pos.X = 0 ; 
 pos.Y = 2 ;
 GetConsoleCursorInfo(hOut, &cci); 
 cci.dwSize = 100; 
  cci.bVisible = 1;
 SetConsoleCursorInfo(hOut, &cci); 
 return type ;
}
//獲取用于輸入 
int Get_User_input(HANDLE hOut,char *ch)
{
 int type ; 
 type = __Get_User_input(hOut,ch);
 switch(type)
 {
 case Char : 
   if(buffer[iindex] == '\0' ) 
   buffer[iindex] = *ch ;
   else
   {
   memmove(buffer+iindex+1 , buffer+iindex , max-iindex) ;
   buffer[iindex] = *ch ;
   }
   iindex ++ ; max ++ ; break ;
 //case LEFT : if(iindex > 0) iindex -- ; break ;
 //case RIGHT : if(iindex < max) iindex ++ ; break ;
 case BACKSPACE : 
   if(iindex > 0){
   memmove(buffer+iindex-1 , buffer+iindex , max-iindex) ; 
   iindex -- ; 
   max -- ;
   }
   if(iindex == 0)
   {
   count = 0 ; 
   }
   break ;
 case ESC : return ESC ;
 }
 return 0 ;
}
//顯示和統(tǒng)計 
void Show_string(HANDLE hOut,const char *text)
{
 system("cls") ;
 printf("\n%s\n",text) ;
 int i ; 
 int errno_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("錯誤的個數(shù):%d", errno_Num) ;
 pos.X = 0;
 pos.Y = 16 ;
 SetConsoleCursorPosition(hOut,pos);
 printf("總個數(shù):%d", (int)strlen(text)) ;
 pos.X = 0;
 pos.Y = 17 ;
 SetConsoleCursorPosition(hOut,pos);
 printf("輸入個數(shù):%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語言如何制作簡易金山打字通功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


標題名稱:C語言如何制作簡易金山打字通功能
分享URL:http://weahome.cn/article/iphcdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部