最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)可以獲取鍵盤輸入的字符,顯示可以使用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++的cout.tellp()和cout.seekp()語(yǔ)法介紹

    C++的cout.tellp()和cout.seekp()語(yǔ)法介紹

    無(wú)論是使用 cout 輸出普通數(shù)據(jù),用 cout.put() 輸出指定字符,還是用 cout.write() 輸出指定字符串,數(shù)據(jù)都會(huì)先放到輸出流緩沖區(qū),待緩沖區(qū)刷新,數(shù)據(jù)才會(huì)輸出到指定位置,本文給大家介紹一下C++的cout.tellp()和cout.seekp()語(yǔ)法,需要的朋友可以參考下
    2023-09-09
  • VC++文件監(jiān)控之FindFirstChangeNotification

    VC++文件監(jiān)控之FindFirstChangeNotification

    因?yàn)镽eadDirectoryChangesW 上次測(cè)試發(fā)現(xiàn)不能多級(jí)目錄監(jiān)控,所以嘗試用FindFirstChangeNotification來(lái)實(shí)施文件監(jiān)控,需要的朋友可以參考下
    2019-04-04
  • C++實(shí)現(xiàn)本地TCP通訊的示例代碼

    C++實(shí)現(xiàn)本地TCP通訊的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C++如何利用TCP技術(shù),實(shí)現(xiàn)本地ROS1和ROS2的通訊,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • 利用C++單例模式實(shí)現(xiàn)高性能配置管理器

    利用C++單例模式實(shí)現(xiàn)高性能配置管理器

    這篇文章主要為大家詳細(xì)介紹了如何利用C++單例模式實(shí)現(xiàn)高性能配置管理器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理詳解

    OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理詳解

    OpenCV是一款由Intel公司俄羅斯團(tuán)隊(duì)發(fā)起并參與和維護(hù)的一個(gè)計(jì)算機(jī)視覺(jué)處理開(kāi)源軟件庫(kù),支持與計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)相關(guān)的眾多算法,下面這篇文章主要給大家介紹了關(guān)于OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • C語(yǔ)言實(shí)現(xiàn)三子棋簡(jiǎn)單小游戲

    C語(yǔ)言實(shí)現(xiàn)三子棋簡(jiǎn)單小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋簡(jiǎn)單小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • linux系統(tǒng)中c++寫日志文件功能分享

    linux系統(tǒng)中c++寫日志文件功能分享

    這篇文章主要介紹了linux系統(tǒng)中c++寫日志文件功能,簡(jiǎn)化了glog,只保留了寫日志文件的功能,只是改寫了linux版本,需要的朋友可以參考下
    2014-03-03
  • C++未定義行為(undefined behavior)

    C++未定義行為(undefined behavior)

    對(duì)于未定義行為,C++標(biāo)準(zhǔn)沒(méi)有明確規(guī)定編譯器們應(yīng)該怎么做,那么執(zhí)行的結(jié)果就是不可預(yù)料的。下面我們來(lái)詳細(xì)探討下
    2017-02-02
  • C++實(shí)現(xiàn)逆波蘭式

    C++實(shí)現(xiàn)逆波蘭式

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)逆波蘭式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C語(yǔ)言中用棧+隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置

    C語(yǔ)言中用棧+隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置

    這篇文章主要介紹了C語(yǔ)言中用利用棧和隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置的相關(guān)資料,對(duì)正在學(xué)習(xí)的小伙伴有一定的參考價(jià)值,需要的可以參考一下,希望對(duì)你有所幫助
    2022-02-02

最新評(píng)論

楚雄市| 柳州市| 沂水县| 塔河县| 垫江县| 广州市| 进贤县| 抚松县| 平罗县| 塘沽区| 萨嘎县| 宿州市| 锡林浩特市| 阿拉善左旗| 新竹县| 丰都县| 昌平区| 蓬溪县| 阿城市| 黔江区| 万荣县| 临清市| 贵德县| 长岭县| 陆川县| 乌兰县| 长兴县| 若羌县| 海盐县| 武宁县| 观塘区| 磴口县| 华安县| 徐闻县| 同仁县| 万全县| 宁安市| 奉新县| 温州市| 穆棱市| 扎鲁特旗|