要求:在一个文件存放了若干行英文字符,作为样本。程序运行时,随机读取文件中的若干行作为原文,显示在屏幕上,提示用户测试开始。用户按照原文依次输入,每次按键应能区分是否输入错误。允许修改输入。完成输入后,显示所用的时间和正确率。
能运行起来,分就全给你,要求不是很高。
// HanZi.cpp : Defines the entry point for the console application.//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"
/*
ä»é®çè·å¾æ±åçç¼ç
å¨ä¸æwindowsä¸ï¼é»è®¤ç¼ç æ¹å¼ä¸ºGB2312, æ¯ä¸ªæ±åç±ä¸¤ä¸ªåèç»æã
å½æ°çç®çæ¯ï¼æè¿ä¸ªæ±åçé«åèåå ¥ pc1æåçä½ç½®ï¼ä½åèåå ¥ pc2æåçä½ç½®
*/
int get_han_zi(unsigned char* pc1, unsigned char* pc2)
{
char buf[100];
printf("\n请è¾å ¥ä¸ä¸ªæ±åï¼");
gets(buf);
if(strlen(buf) != 2) return -1;
*pc1 = buf[0];
*pc2 = buf[1];
if(*pc1 < 0xa1) return -2;
if(*pc2 < 0xa1) return -2;
return 0;}
/*
ä»æ件ï¼åå½¢æ件HZK16ï¼æåå½¢è£ å ¥å°ä¸ä¸ª32åèçç¼å²åº buf ä¸ã
c1 æ¯è¯¥æ±åGB2312ç¼ç çé«åèï¼c2æ¯ä½åèã
æ¯ä¸ªbit代表1个åç´ ç¹ï¼16ç¹éµçå模éè¦256个åç´ ç¹ä¿¡æ¯ï¼æ é32åè
åèçæåä¸16ç¹éµåç´ ç对åºå ³ç³»å¦ä¸å¾ï¼
第0åè 第1åè
第2åè 第3åè
.......
第14åè 第15åè
ä¹å°±æ¯è¯´ï¼æ¯1è¡ç16个ç¹ç±2个åèæä¾ã顺åºæ¯ï¼ä»ä¸å°ä¸ï¼ä»å·¦å°å³ã
GB2312çç¼ç è§åæ¯ï¼åä¸ä¸ªåè表示åºå·ï¼åä¸ä¸ªè¡¨ç¤ºåºä¸çå移åºå·ã
æ¯ä¸ªåºæ94个æ±åãåºå·ååºå·çç¼ç é½æ¯ä» 0xA1å¼å§ï¼ä¸ºäºé¿å å西æå²çªï¼
å æ¤ï¼å·²ç¥æ个æ±åçç¼ç ï¼å°±å¯ä»¥è®¡ç®åºæ件ä¸æå¨çç»å¯¹ä½ç½®ã
*/
void load_han_zi(unsigned char* buf, unsigned char c1, unsigned char c2)
{
int n = (c1 - 0xa1) * 94 + (c2 - 0xa1); // 计ç®å¨æ件ä¸çä½ç½®
FILE* fp = fopen("HZK16.DAT", "rb");
if(fp==NULL){
printf("æ±ååºæå¼éï¼");
exit(1);
}
fseek(fp, n * 32L, SEEK_SET);
for(int i=0; i<32; i++){
buf[i] = (unsigned char)fgetc(fp);
}
fclose(fp);}
/*
æ¾ç¤ºæ±å
buf: ä»æ件ä¸è¯»åºçæ±åå模信æ¯ï¼32åèï¼è¯´æåä¸
italic: =1ï¼å¦æè¦æ±æä½ï¼ =0 æ£å¸¸
kx: æ°´å¹³æ¾å¤§ç
ky: åç´æ¾å¤§ç
fill: ç¨äºå¡«å çå符
*/
void show_han_zi(unsigned char* buf, int italic, int kx, int ky, char fill)
{
for(int i=0; i<16; i++){
for(int k1=0; k1<ky; k1++){
printf("\n");
if(italic){
for(int k3=0; k3<15-i; k3++)
printf(" ");
}
for(int j=0; j<16; j++){
if(buf[i*2 + (j/8)] & (0x80 >> (j%8)))
for(int k2=0; k2<kx; k2++)
printf("%c", fill);
else
for(int k2=0; k2<kx; k2++)
printf(" ");
}
}
}
}
void write_to_file(unsigned char* buf, int italic, int kx, int ky, char fill)
{
FILE* fp = fopen("a.txt", "w");
for(int i=0; i<16; i++){
for(int k1=0; k1<ky; k1++){
fputc('\n', fp);
if(italic){
for(int k3=0; k3<15-i; k3++)
fputc(' ', fp);
}
for(int j=0; j<16; j++){
if(buf[i*2 + (j/8)] & (0x80 >> (j%8)))
for(int k2=0; k2<kx; k2++)
fputc(fill, fp);
else
for(int k2=0; k2<kx; k2++)
fputc(' ', fp);
}
}
}
fclose(fp);}
int set_zoom_k(int* pk)
{
printf("请è¾å ¥æ¾å¤§ç(1-4)ï¼");
char buf[100];
gets(buf);
int n = atoi(buf);
if(n<1 || n>4) return -1;
*pk = n;
return 0;
}
char get_fill_char()
{
for(;;){
printf("请è¾å ¥ç¨äºå¡«å çå符");
char c = getch();
if(c>32 && c<125) return c;
}
}
int main(int argc, char* argv[])
{
unsigned char han_zi_buf[32]; // åå¨16ç¹éµæ±åçå模
int font_italic = 0;
int font_kx = 1; // æ°´å¹³æ¾å¤§ç
int font_ky = 1; // åç´æ¾å¤§ç
char fill_char = '@'; // å¡«å å符
for(;;){
printf("\n----------------\n");
printf("1. è¾å ¥ä¸ä¸ªæ±å\n");
printf("2. åæ¢æä½\n");
printf("3. 设置水平æ¾å¤§\n");
printf("4. 设置åç´æ¾å¤§\n");
printf("5. 设置填å å符\n");
printf("6. è¾åºå°æ件a.txt\n");
printf("7. éåº\n");
printf("----------------\n");
printf("请éæ©ç¸åºçæ°å\n"); char c = (char)getch();
switch(c){
case '1':
{
unsigned char c1;
unsigned char c2;
if(get_han_zi(&c1, &c2) != 0)
printf("\nè¾å ¥æ æï¼\n");
else{
load_han_zi(han_zi_buf, c1, c2);
show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);
}
}
break;
case '2':
font_italic = (font_italic + 1) % 2;
show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);
break;
case '3':
if(set_zoom_k(&font_kx) !=0)
printf("\nè¾å ¥æ æï¼\n");
else
show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);
break;
case '4':
if(set_zoom_k(&font_ky) !=0)
printf("\nè¾å ¥æ æï¼\n");
else
show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);
break;
case '5':
fill_char = get_fill_char();
show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);
break;
case '6':
write_to_file(han_zi_buf, font_italic, font_kx, font_ky, fill_char);
break;
case '7':
exit(0);
break;
default:
printf("\næ¨çéæ©æ æï¼\n");
}
}
return 0;
}
建ç«å¦æ¤æ件åHZK16.DAT
å¯ä»¥é®ç®±æ´å¥æ件åç»ä½
追é®æç¨codeblockè¿è¡ï¼ç»æè¿æ ·
æå¨Dçä¸å建äºHZK16.DAT
æè§ä½ é®çåè¿éé¢æºç±»ä¼¼çï¼å¦ææ³è¦ï¼å¯ä»¥çé®ç®±ï¼ä¼ ç»ä½ ï¼ä¸è¿æ确信ï¼ä½ ãåä½ è¯´çè¿æ¯æç¹åºå«ç
追é®æ²¡äºï¼ä¸ç¨å®å ¨ä¸æ ·ï¼åªè¦è½è¿è¡å°±è¡ï¼é®ç®±ï¼[email protected]ï¼è°¢äº
追çå·²ç»åéã谢谢ç»åã