#include "stdafx.h"
#include <assert.h>
#include <stdlib.h>
#include <iostream>
typedef int(*FP_CALC)(int, int);
int add1(int a, int b)
{
return a + b;
}
int sub1(int a, int b)
{
return a - b;
}
int mul1(int a, int b)
{
return a*b;
}
int div1(int a, int b)
{
return b ? a / b : -1;
}
FP_CALC calc_func(char op)
{
switch (op)
{
case'+':
return add1;
case '-':
return sub1;
case'*':
return mul1;
case'/':
return div1;
default:
return nullptr;
}
}
int(*s_calc_func(char op))(int a, int b)
{
return calc_func(op);
}
int calc(int a, int b, char op)
{
FP_CALC fp = calc_func(op);
//int(*s_fp)(int, int) = s_calc_func(op);
//assert(fp == s_fp);
if (fp)
return fp(a, b);
else
return -1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 100, b = 20;
printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));
printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));
printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));
printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));
system("pause");
return 0;
}