| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1409 人关注过本帖
标题:"请选择"的另类实现!
只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏
 问题点数:0 回复次数:13 
"请选择"的另类实现!
程序代码:
#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-01-01 20:51
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
还可以,指向函数的指针数组。

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

—>〉Sun〈<—
2008-01-01 20:55
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
高手如云那!
2008-01-01 21:32
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
很早以前就用过这种方法了……原来帮一个人写学生管理系统的时候,菜单就是这么弄的……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-01-01 21:55
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
改良...
程序代码:
#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-01-01 22:22
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
请大家讲讲这样实现有什么好处...有什么坏处...
大家说说这种技巧所隐藏的内涵.
2008-01-01 22:25
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
很多程序中需要使用指向函数的指针。

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

—>〉Sun〈<—
2008-01-01 22:40
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
其实也就是快一点点,C语言版的多态……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-01-01 22:43
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
额……别误会,我是说写代码时快一点点……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-01-01 22:44
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
你们的回答我只能说我不是很满意!
2008-01-01 23:08
快速回复:"请选择"的另类实现!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028568 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved