| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 634 人关注过本帖
标题:"请选择"的另类实现!
收藏  订阅  推荐  打印 
ioriliao
Rank: 12Rank: 12Rank: 12
来自:广东
等级:贵宾
威望:29
帖子:2122
积分:23963
注册:2006-11-30
"请选择"的另类实现!


程序代码:
#include <stdio.h>
#include <stdlib.h>

typedef void (*types)(void);
void counter(int a, types vd[3]);
void printx(void);
void printy(void);
void printj(void);

int main(void)
{
        types pp[3]={printx,printy,printj};
        int x;
        printf("请选择一个打印功能\n");
        printf("0--printX\n");
        printf("1--printY\n");
        printf("2--printJ\n");
        scanf("%d",&x);
        counter(x,pp);
        system("pause");
        return 0;
}
void counter(int a, types vd[3])
{
        vd[a]();
}

void printx(void)
{
        printf("XXXXXXXXXXXXXXXXXXXX\n");
}
void printy(void)
{
        printf("YYYYYYYYYYYYYYYYYYYY\n");
}
void printj(void)
{
        printf("JJJJJJJJJJJJJJJJJJJJ\n");
}
搜索更多相关主题的帖子: 另类  选择  
2008-1-1 20:51
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1377
积分:14374
注册:2007-6-19

还可以,指向函数的指针数组。

[[italic] 本帖最后由 cosdos 于 2008-1-1 20:57 编辑 [/italic]]

—>〉Sun〈<—
2008-1-1 20:55
xianshizhe111
Rank: 6Rank: 6
等级:金牌会员
帖子:1451
积分:15818
注册:2007-12-8

高手如云那!
2008-1-1 21:32
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

很早以前就用过这种方法了……原来帮一个人写学生管理系统的时候,菜单就是这么弄的……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-1-1 21:55
ioriliao
Rank: 12Rank: 12Rank: 12
来自:广东
等级:贵宾
威望:29
帖子:2122
积分:23963
注册:2006-11-30

改良...
程序代码:
#include <stdio.h>
#include <stdlib.h>

typedef void (*types)(void);
void counter(int a, types* vd);
void printx(void);
void printy(void);
void printj(void);
//扩展打印功能 3-printk
void printk(void);
void guid(char* str[],int menu_count);

types pp[]={printx,printy,printj,printk};
char* str[]={
                {"请选择一个打印功能\n"},
                {"0--printX\n"},
                {"1--printY\n"},
                {"2--printJ\n"},
                {"3--printK\n"}
            };

int main(void)
{

        int x;
        guid(str,4);
        scanf("%d",&x);
        counter(x,pp);
        system("pause");
        return 0;
}
void counter(int a, types* vd)
{
        vd[a]();
}

void printx(void)
{
        printf("XXXXXXXXXXXXXXXXXXXX\n");
}
void printy(void)
{
        printf("YYYYYYYYYYYYYYYYYYYY\n");
}
void printj(void)
{
        printf("JJJJJJJJJJJJJJJJJJJJ\n");
}

//扩展打印功能 3-printk
void printk(void)
{
        printf("KKKKKKKKKKKKKKKKKKKK\n");
}

void guid(char* str[],int menu_count)
{
        while((menu_count--)>=0) printf(*str++);
}
2008-1-1 22:22
ioriliao
Rank: 12Rank: 12Rank: 12
来自:广东
等级:贵宾
威望:29
帖子:2122
积分:23963
注册:2006-11-30

请大家讲讲这样实现有什么好处...有什么坏处...
大家说说这种技巧所隐藏的内涵.
2008-1-1 22:25
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1377
积分:14374
注册:2007-6-19

很多程序中需要使用指向函数的指针。

指向函数的指针的数组很少用到。

—>〉Sun〈<—
2008-1-1 22:40
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

其实也就是快一点点,C语言版的多态……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-1-1 22:43
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:版主
威望:9
帖子:2483
积分:26219
注册:2007-11-16

额……别误会,我是说写代码时快一点点……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-1-1 22:44
ioriliao
Rank: 12Rank: 12Rank: 12
来自:广东
等级:贵宾
威望:29
帖子:2122
积分:23963
注册:2006-11-30

你们的回答我只能说我不是很满意!
2008-1-1 23:08
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.058393 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved