想办法弄个循环把代码简化一下,该怎么处理
想办法弄个循环把代码简化一下
将dataname和“”中的数据进行对比匹配,匹配成功则赋值。
想办法弄个循环把代码简化一下!
int fuzhi(char *dataname,char *datavalue,int modu_num)
{
if(!(strcmp(dataname,"CmdData_1")))
{
Modu[modu_num].moduData.CmdData[0]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_2")))
{
Modu[modu_num].moduData.CmdData[1]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_3")))
{
Modu[modu_num].moduData.CmdData[2]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_4")))
{
Modu[modu_num].moduData.CmdData[3]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_5")))
{
Modu[modu_num].moduData.CmdData[4]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_6")))
{
Modu[modu_num].moduData.CmdData[5]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_7")))
{
Modu[modu_num].moduData.CmdData[6]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_8")))
{
Modu[modu_num].moduData.CmdData[7]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_9")))
{
Modu[modu_num].moduData.CmdData[8]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_10")))
{
Modu[modu_num].moduData.CmdData[9]=translate16(datavalue);
}
}
------解决方案--------------------
定义一个指针数组,用于指向这10个字符常量,然后写一个函数,这个函数的功能就是用于查找dataname,然后返回下标。
将dataname和“”中的数据进行对比匹配,匹配成功则赋值。
想办法弄个循环把代码简化一下!
int fuzhi(char *dataname,char *datavalue,int modu_num)
{
if(!(strcmp(dataname,"CmdData_1")))
{
Modu[modu_num].moduData.CmdData[0]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_2")))
{
Modu[modu_num].moduData.CmdData[1]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_3")))
{
Modu[modu_num].moduData.CmdData[2]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_4")))
{
Modu[modu_num].moduData.CmdData[3]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_5")))
{
Modu[modu_num].moduData.CmdData[4]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_6")))
{
Modu[modu_num].moduData.CmdData[5]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_7")))
{
Modu[modu_num].moduData.CmdData[6]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_8")))
{
Modu[modu_num].moduData.CmdData[7]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_9")))
{
Modu[modu_num].moduData.CmdData[8]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_10")))
{
Modu[modu_num].moduData.CmdData[9]=translate16(datavalue);
}
}
------解决方案--------------------
定义一个指针数组,用于指向这10个字符常量,然后写一个函数,这个函数的功能就是用于查找dataname,然后返回下标。
- C/C++ code
/* 正确返回字符串的下标,返回-1说明没有找到。*/ int getIndex(char *dataname, int len) { char *str[10] = { "CmdData_1", "CmdDate_2", ...}; int i; for (i = 0; i < 10; i++) if (!strcmp(dataname, str[i])) return i; return -1; } int fuzhi(char *dataname,char *datavalue,int modu_num) { int num; /* 用于接收字符串常量的下标 */ num = getIndex(dataname); if (num < 0) { fprintf(stderr, "Can't find it!\n"); return -1; } Modu[modu_num].moduData.CmdData[num]=translate16(datavalue); return 0; }