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

头文件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;
}
尝试着使用不同的思路与编程手法去编写,一些功能简单的小摸块;可以打开自己的编程思路与体系设计思路,同时也可以掌握更多自己少有但是实用的编程技巧。总的来说,还是蛮有意思的。:-)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值