日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]這是很久之前學(xué)習(xí)C語言練習(xí)的一個小項目。 本小項目最終的實現(xiàn)如下: 輸入相應(yīng)的字符,然后在最下面能夠統(tǒng)計錯誤的個數(shù),輸入字符總個數(shù),輸入個數(shù)以及錯誤率。 那如何來實現(xiàn)這個小項目呢?規(guī)劃如下,我們需要大致實現(xiàn)以下三個模塊: 1 輸入模塊 2 顯示模塊 3

這是很久之前學(xué)習(xí)C語言練習(xí)的一個小項目。

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

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

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

1 輸入模塊

2 顯示模塊

3 統(tǒng)計模塊

實現(xiàn)過程:

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

實現(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 "金山打字通----楊源鑫20180608"

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);
//獲取當(dāng)前的句柄---設(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語言測試框架

分享一個自己量產(chǎn)項目上的集成測試軟件MTTEST

若覺得本次分享的文章對您有幫助,隨手點[在看]并轉(zhuǎn)發(fā)分享,也是對我的支持。

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉