c语言中void msg,求解一个关于typedef void (*msg)(void)的有关问题(2)

return 0;

}

}

}

}

}

fclose(f);

printf("Can not find function of key '%c'!\n",c);

return 2;

}

//C:\test>test

//Input a char:a

//Can not find function of key 'a'!

//

//C:\test>test

//Input a char:h

//hello

//

//C:\test>test

//Input a char:b

//goodbye

//

------解决方案--------------------

不好意思,刚写的拙计了,有几个疏忽,可以参考下面的代码:

(1)先定义一个函数名->函数的映射

typedef void (*pFun)(void);

map nameFunMap;

nameFunMap.insert(make_pair("hello", &hello));

nameFunMap.insert(make_pair("bye", &bye));

(2)再定义一个缩写->函数名的映射

map abbrNameMap;

char line[MAX], *p;

fp = fopen(initFilePath, "r");

while(fgets(line, MAX, fp)){

if((p = strchr(line, '=')) && p-line == 1){//你用的是一个字母的缩写

abbrNameMap.insert(make_pair(line[0], string(*(p+1))));

}

}

(3)根据输入的缩写得到函数名,根据函数名调用函数

map::iterator abbrNameIter;

map::iterator nameFunIter;

c = getchar();

abbrNameIter = abbrNameMap.find(c);//根据输入的缩写得到函数名

if(abbrNameIter != abbrNameMap.end()){

nameFunIter = nameFunMap.find(abbrNameIter->second);//根据函数名得到函数地址

if(nameFunIter != nameFunMap.end()) *(nameFunIter->second);//调用函数

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值