| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1047 人关注过本帖
标题:switch,43个case?有更好的解决方法吗?
只看楼主 加入收藏
fallingstar6
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2009-10-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:17 
switch,43个case?有更好的解决方法吗?
如题,函数的目的要读到相应位置的数据 函数声明为int ReadSingleData(int Address)
输入Address是从0到42总共43个整数(表示位置)
返回是读到的数据,比如:输入0对应  int a
输入1对应 float b
.
.
.
.输入42对应 float xx
a,b,....,xx,这些变量是开始定义好的,在其他的函数里还要分别用到,我这里写的时候进行了简化,其实他们是属于不同结构的变量。
这43个数里面有int 和float两种类型的数据。
当然,最后return的时候会把float数全部转化为int。

我想到一个很笨的方法用switch,但是43个case让我望而却步,望高手给我一个更好的方法,谢过谢过~~~~~~~



[ 本帖最后由 fallingstar6 于 2009-10-27 15:48 编辑 ]
搜索更多相关主题的帖子: switch case 
2009-10-27 14:41
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:10 
用数组啊
2009-10-27 14:47
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
for(i=0;i<43;i++)
scanf("%f",&a[i]);
输出原理类似
ps:switch是语句,不是函数

我可好玩啦...不信你玩玩^_^
2009-10-27 15:33
fallingstar6
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2009-10-27
收藏
得分:0 
回复 3楼 pgy
谢谢pgy,我想我可能没说太清楚,我重新修改了一下帖子
2009-10-27 15:47
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
a[43]={...}
scanf i
int p(int i)
printf a[i]

既然输出的时候都会转换为int,那就先转换了不行么?
要不然数据没有共性,那数组也用不了,除非数据的特征有规律,要不然...
            疯狂的case
(引用)其实他们是属于不同结构的变量。
    难道是不同的结构体中的变量

我可好玩啦...不信你玩玩^_^
2009-10-27 16:01
fallingstar6
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2009-10-27
收藏
得分:0 
回复 5楼 pgy
是的,是不同结构体中的变量
实际上我是DSP编程,这些结构体中的变量是经常变的,先转化了后来需要调用的时候不好处理。。。。

[ 本帖最后由 fallingstar6 于 2009-10-27 16:42 编辑 ]
2009-10-27 16:37
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
我不知道了,m456,你来说说看    (存储上没规律,类型上也没规律连值都没规律
    Crazy "case"
收到的鲜花
  • fallingstar62009-10-28 15:10 送鲜花  3朵   附言:谢谢pgy,结贴评分给错人了,本来想给pgy的 ...

我可好玩啦...不信你玩玩^_^
2009-10-27 16:44
fallingstar6
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2009-10-27
收藏
得分:0 
嗯,如果类型都一样,比如说float,就可以创建一个指针数组,直接调用数据的指针就可以了,是不是这样?
2009-10-27 16:55
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:10 
union data {
    int     idata;
    float fdate;
    int    isfloat;
} ar[43];   // 初始化比较麻烦

//---------------------------------


—>〉Sun〈<—
2009-10-27 17:35
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
回复 7楼 pgy
什么都扯上我~
你不会偶就会了?
我还是不太明白楼主的意思。你在相应位置存了什么数自己不清楚吗?就算是int型的也可以当float用啊,这样没误差,又不是float当int用。调用完后再化为int不行嘛。
我拿个例子说明一下吧(不确定楼主是不是想解决这个问题):
#include "stdio.h"
void main()
{
    int i=2;
    float t;
    float fun(int x);
    t=fun(i);
    printf("%f\n",(float)t);//用float型输出,原来是float的还是float,是int的只是多了一个小数点和后面的6个零,但是已经知道对应位置的数值了
    printf("%d\n",(int)t);//最后转化为int型,对于原来存放的是int型的无影响,对float型没了小数部分,也为整数
}
float fun(int s)//输入的是int型的
{
    float t,p=2.5;
    t=p+s;
    return (t);//结果都返回float型
}
   

[ 本帖最后由 m456m654 于 2009-10-27 18:01 编辑 ]
2009-10-27 17:49
快速回复:switch,43个case?有更好的解决方法吗?
数据加载中...
 
   



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

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