如何用指向函数的指针替换switch-case
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序中当switch-case里面有很多分支,且每个分支有很多操作要做时,会花费很多时间,优化的方法有很多,比如将可能性大的放在前面,将case操作压缩,其实,最好的方法利用指向函数的指针解决问题,下面我们来看一个例子:
先来一个switch-case的模板:
view plaincopy to clipboardprint?
1. #include
2. #include
3.
4. enum MsgType{ Msg1=1 ,Msg2 ,Msg3 ,Msg4 };
5.
6. int menu()
7. {
8. int choice;
9. printf("1.ADD/n");
10. printf("2.DEL/n");
11. printf("3.SORT/n");
12. printf("4.exit/n");
13. printf("input your choice:/n");
14. scanf("%d",&choice);
15. return choice;
16. }
17.
18. void ADD()
19. {
20. NULL;
21. //
22. }
23.
24. void DEL()
25. {
26. NULL;
27. //
28. }
29.
30. void SORT()
31. {
32. NULL;
33. //
34. }
35.
36. int main()
37. {
38. while(1)
39. {
40. switch(menu())
41. {
42. case Msg1:
43. ADD();
44. break;
45. case Msg2:
46. DEL();
47. break;
48. case Msg3:
49. SORT();
50. break;
51. case Msg4:
52. exit(0);
53. break;
54. default:
55. printf("input error/n");
56. break;
57. }
58. }
59. return 0;
60. }
61.
62.
1. #include
2. #include
3.
4. void ADD();
5. void DEL();
6. void SORT();
7. void EXIT();
8.
9. void (*MsgFunc[])()={ ADD ,DEL ,SORT ,EXIT };
10.
11. int menu()
12. {
13. int choice;
14. printf("1.ADD/n");
15. printf("2.DEL/n");
16. printf("3.SORT/n");
17. printf("4.EXIT/n");
18. printf("input your choice:/n");
19. scanf("%d",&choice);
20. return choice-1;
21. }
22.
23. int main()
24. {
25. while(1)
26. {
27. MsgFunc[menu()]();
28. }
29. return 0;
30. }
31.
32. void ADD()
33. {
34. NULL;
35. //
36. }
37.
38. void DEL()
39. {
40. NULL;
41. //
42. }
43.
44. void SORT()
45. {
46. NULL;
47. //
48. }
49.
50. void EXIT()
51. {
52. exit(0);
53. }
54.
55.