您的位置:首页 > 其它

用不同的思路去完成简单的C程序编写

2013-03-21 02:00 429 查看
头文件1:func_desc.h

#ifndef __FUNC_DESC_H__
#define __FUNC_DESC_H__

#include <stdio.h>
#include <String.h>
#include <malloc.h>
#include "register_mod.h"

#define  NUMBER_XJ	2

struct class_attr;
struct func_operations {
void (*change_id)(struct class_attr *arg1, int id);
int  (*compera_values)(struct class_attr *arg1, char *Str);
void (*load_message)(struct class_attr *arg1);
};

struct class_attr {
int  id;
char private_data;
char *name;
char *number;
char *message;

struct func_operations *fops;
};

#endif


头文件2:register_mod.h

#ifndef __REGISTER_MOD_H__
#define __REGISTER_MOD_H__

#include "func_desc.h"

#define _LIST_MAX_LEN_	10

struct t_list {
int  id;
struct class_attr *attr;
//	struct t_list *next;
};

void look_for_list_each(char *Str);
int  register_structs(struct class_attr *dev, struct func_operations *fops);

#endif


辅助模块:register.c

#include "register_mod.h"

static cnt = 0;
static struct t_list m_list[_LIST_MAX_LEN_];

/*
*		将结构体加入m_list数组中
*/
int register_structs(struct class_attr *dev, struct func_operations *fops)
{
dev->fops = fops;

m_list[cnt].attr = dev;
m_list[cnt].id   = dev->id;

cnt++;

return 0;
}

/*
*		查找匹配数组元素
*/
void look_for_list_each(char *Str)
{
int i;
int ret;

for (i = 0; (i < 10) && (NULL != m_list[i].attr); i++) {
ret = m_list[i].attr->fops->compera_values(m_list[i].attr, Str);
if (!ret) {
m_list[i].attr->fops->load_message(m_list[i].attr);
break;
}
if (9 == i)
{
goto failed_1t;
}
}

failed_1t:
printf("Didn't find the %s.\n", Str);
}
主模块:main.c

#include "func_desc.h"

static struct class_attr *ops_stru;

/*
*		修改结构体id号
*/
void change_id(struct class_attr *ops_stru, int id)
{
ops_stru->id = id;
}

/*
*		比较结构体的name值
*/
int compera_values(struct class_attr *ops_stru, char *Str)
{
if (!strcmp(ops_stru->name,Str)) {
return 0;
} else {
return 1;
}
}

/*
*		打印结构体内部变量
*/
void load_message(struct class_attr *ops_stru)
{
printf("Name    : %s\n", ops_stru->name);
printf("Number  : %s\n", ops_stru->number);
printf("Id      : %d\n", ops_stru->id);
printf("Message : %s\n", ops_stru->message);
}

struct func_operations f_ops =
{
.change_id      = change_id,
.compera_values = compera_values,
.load_message   = load_message,
};

int main(int argc, char *argv[])
{
char *input;
/* 分配指针空间 */
input    = (char *)malloc(sizeof(char) + 10);
ops_stru = (struct class_attr *)malloc(sizeof(struct class_attr));

/* 初始化结构体特性 */
ops_stru->name    = "XiaoJia";
ops_stru->number  = "10524001";
ops_stru->id      = NUMBER_XJ;
ops_stru->message = "He is a boy.";

/* 注册class_dev */
register_structs(ops_stru, &f_ops);

/* 获取输入 */
printf("Input the name you want to find:");
scanf("%s",input);

/* 查找是否存在此数据 */
look_for_list_each(input);

/* 释放内存空间 */
free(input);
free(ops_stru);

return 0;
}
尝试着使用不同的思路与编程手法去编写,一些功能简单的小摸块;可以打开自己的编程思路与体系设计思路,同时也可以掌握更多自己少有但是实用的编程技巧。总的来说,还是蛮有意思的。:-)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: