现在的位置: 首页 > 综合 > 正文

MFC打字训练娱乐程序(二)

2013年09月17日 ⁄ 综合 ⁄ 共 2065字 ⁄ 字号 评论关闭

继续MFC打字训练娱乐程序,今天先简要介绍一下程序中用到的一些函数,其实都可以写成类的形式,能更方便的使用,比函数形式有很大的好处,在小函数中我们只能定义了一下变量名后,在其他的函数中如果再用这个名称定义变量,就会出问题,但是如果用类的形式写出来就没有这种忧虑。本人目前对类的熟悉度还有待于提高,只能稍微了解下函数用法。平时我们接触的都是把所有的代码都放到一个CPP中,但是我们其实可以这样操作。

首先,右键头文件,添加新项,选中.h”键入头文件名,然后在源文件中同样方法,但是要添加“.cpp”文件,尤其注意二者键入的文件名一样。

其次,我定义了头文件,里面代码如下:

#ifndef _DICTMGR_H

#define _DICTMGR_H

#define Max_______LineLength 30//代表每一行的长度,程序里和行的长度有关的都是常量

bool InitDict(charfile);

void CloseDict();

charGetNext();

//void FileName(char *Dictionary);

#endif  // _DICTMGR_H

需说明#ifndef _DICTMGR_H#define _DICTMGR_H意思是,在应用该文件时先检查是否已经定义过,如若已经定义则#endif  // _DICTMGR_H,这样可以防止重定义。

最后看看使用的函数功能:

#include "stdafx.h"

#include "DictMgr.h"

#include <stdlib.h>

#include <Windows.h>

static char * g_pFile = 0;//文本

static int    g_LineCount = 0;//用以存放文本中的行数

//获取一个文本中的行数

static int LineCount(FILE *fp)

{

char linebuf[Max_______LineLength] = {0};

int  n = 0;

while (fgets(linebuf,Max_______LineLengthfp)) 

n++;

return n;

}

#define IS_ALPHA(c) ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))

#define IS_NUMBER(c) ((c >= '0' && c <= '9'))

//此操作用来省去每一行读入内存后的换行符

static void Trim(charline)

{

//以下循环是把szWord最后的换行符清除

for (size_t i = 0; i < strlen(line); i++)

{

if (!(IS_ALPHA(line[i]) || IS_NUMBER(line[i])))

line[i] = 0;

}

}

bool InitDict(charfile)

{

FILE *fp = fopen(file,"r");

if (fp == 0)

{

return false;

}

char szLine[Max_______LineLength] = {0};

g_LineCount = LineCount(fp);//获知file中的行数

fseek(fp, 0, 0);

g_pFile =  (char*)malloc(g_LineCount * Max_______LineLength);//申请动态内存

memset(g_pFile, 0, g_LineCount * Max_______LineLength);//对动态内存清零

//以下程序是把字典文件中的内容读到内存里;

charpContent = g_pFile;

while(fgets(szLine,Max_______LineLength,fp))

{

Trim(szLine);

memcpy(pContentszLine,  Max_______LineLength);//szLine代表的内存指向指针pContent

pContent += Max_______LineLength;//将指针pContent移动到下一行以方便继续下一步对szLine的操作

memset(szLine, 0, Max_______LineLength);//将指针szLine清零

}

fclose(fp);

return true;

}

//文件使用完后要CLOSE

void CloseDict()

{

if (g_pFile)

{

free(g_pFile);

g_pFile = 0;

}

}

//获得文件中随机一个单词,饿哦使用的文件每个单词单独一行

charGetNext()

{

srand(GetTickCount());

int index = rand() % g_LineCount;

return g_pFile + Max_______LineLength*index;

}

 

待续。。。。。。

抱歉!评论已关闭.