欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言制作簡(jiǎn)易金山打字通功能的代碼

 更新時(shí)間:2018年12月14日 16:02:41   作者:Engineer-Bruce_Yang  
今天小編就為大家分享一篇關(guān)于C語(yǔ)言制作簡(jiǎn)易金山打字通功能的代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

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

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

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

  • (1)輸入模塊
  • (2)顯示模塊
  • (3)統(tǒng)計(jì)模塊

實(shí)現(xiàn)過(guò)程:

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

源碼如下:

#include <stdio.h>
#include <string.h>
#include <Windows.h>
#include <unistd.h>
#include <conio.h>
#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è)置光標(biāo)結(jié)構(gòu)體變量
CONSOLE_CURSOR_INFO cci; 
//定義默認(rèn)的坐標(biāo)位置  
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);
 //獲取當(dāng)前的句柄---設(shè)置為標(biāo)準(zhǔn)輸出句柄 
  //獲取光標(biāo)信息
  GetConsoleCursorInfo(hOut, &cci); 
 //設(shè)置光標(biāo)大小  
 pos.X = 0 ; 
 pos.Y = 2 ;
  cci.dwSize = 1; 
 //設(shè)置光標(biāo)不可見(jiàn) FALSE  
  cci.bVisible = 0; 
  //設(shè)置(應(yīng)用)光標(biāo)信息
  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 ;
 //打開(kāi)回顯 
 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)計(jì) 
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("錯(cuò)誤的個(gè)數(shù):%d", errno_Num) ;
 pos.X = 0;
 pos.Y = 16 ;
 SetConsoleCursorPosition(hOut,pos);
 printf("總個(gè)數(shù):%d", (int)strlen(text)) ;
 pos.X = 0;
 pos.Y = 17 ;
 SetConsoleCursorPosition(hOut,pos);
 printf("輸入個(gè)數(shù):%d", max) ;
 pos.X = 0;
 pos.Y = 18 ;
 SetConsoleCursorPosition(hOut,pos);
 if(count == 0)
 printf("錯(cuò)誤率:0%%") ;
 else
 printf("錯(cuò)誤率:%.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);
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計(jì)

    C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計(jì)

    在圖像分析的時(shí)候,我們經(jīng)常需要對(duì)單通道圖像的像素進(jìn)行統(tǒng)計(jì)。本文將主要介紹利用C++ OpenCV實(shí)現(xiàn)的圖像像素值統(tǒng)計(jì)的幾種方法,需要的可以參考一下
    2022-01-01
  • C++實(shí)現(xiàn)選擇性排序(SelectionSort)

    C++實(shí)現(xiàn)選擇性排序(SelectionSort)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)選擇性排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們)

    Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們)

    這篇文章主要介紹了Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C++實(shí)現(xiàn)俄羅斯方塊(linux版本)

    C++實(shí)現(xiàn)俄羅斯方塊(linux版本)

    這篇文章主要為大家詳細(xì)介紹了linux版本C++實(shí)現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Qt5實(shí)現(xiàn)qDebug日志信息寫(xiě)入日志文件過(guò)程

    Qt5實(shí)現(xiàn)qDebug日志信息寫(xiě)入日志文件過(guò)程

    這篇文章主要為大家介紹了Qt5實(shí)現(xiàn)qDebug日志信息寫(xiě)入日志文件的過(guò)程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Visual Studio 2019創(chuàng)建C++ Hello World項(xiàng)目的方法

    Visual Studio 2019創(chuàng)建C++ Hello World項(xiàng)目的方法

    這篇文章主要介紹了Visual Studio 2019創(chuàng)建C++ Hello World項(xiàng)目的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C語(yǔ)言實(shí)現(xiàn)經(jīng)典小游戲井字棋的示例代碼

    C語(yǔ)言實(shí)現(xiàn)經(jīng)典小游戲井字棋的示例代碼

    這個(gè)三子棋游戲是在學(xué)習(xí)C語(yǔ)言的過(guò)程中自己編寫(xiě)的一個(gè)小游戲,現(xiàn)在將自己的思路(主要以流程圖形式和代碼中的注釋表達(dá))和具體代碼以及運(yùn)行結(jié)果分享出來(lái)以供大家學(xué)習(xí)參考,希望對(duì)大家有所幫助
    2022-11-11
  • C++ 學(xué)習(xí)之旅三 我和超級(jí)瑪麗有個(gè)約會(huì)

    C++ 學(xué)習(xí)之旅三 我和超級(jí)瑪麗有個(gè)約會(huì)

    學(xué)習(xí)了c++有一周有余了吧,感謝孫鑫老師的視頻教程,讓我   對(duì)C++有了基本的了解,并理解到C++與.net 的許許多多的區(qū)別,更要感謝網(wǎng)民為programaking的人,會(huì)為我提供了超級(jí)瑪麗制作揭秘 這套寶貴的教程,讓我 做做出了這個(gè)項(xiàng)目,對(duì)c++ 有了一個(gè)更深層次的認(rèn)識(shí)
    2012-11-11
  • C語(yǔ)言將音視頻時(shí)鐘同步封裝成通用模塊的方法

    C語(yǔ)言將音視頻時(shí)鐘同步封裝成通用模塊的方法

    視頻的時(shí)鐘基于視頻幀的時(shí)間戳,由于視頻是通過(guò)一定的幀率渲染的,采用直接讀取當(dāng)前時(shí)間戳的方式獲取時(shí)鐘會(huì)造成一定的誤差,精度不足,這篇文章主要介紹了c語(yǔ)言將音視頻時(shí)鐘同步封裝成通用模塊,需要的朋友可以參考下
    2022-09-09
  • 解析linux 文件和目錄操作的相關(guān)函數(shù)

    解析linux 文件和目錄操作的相關(guān)函數(shù)

    以下是對(duì)linux中文件和目錄操作的相關(guān)函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08

最新評(píng)論