将用户输入作为运算符导入表达式

时间:2011-03-24 01:55:07

标签: c parsing input expression

是否可以将用户输入作为变量用于表达?

scanf("%s", op); //User enters "==" or "!="

if(x op y)
   //Go.

2 个答案:

答案 0 :(得分:6)

没有。你能做的最好就是:

scanf("%s", &op);
if (strcmp(op, "==") == 0) {
    result = x == y;
}
else if (strcmp(op, "!=") == 0) {
    result = x != y;
}

// now use result

答案 1 :(得分:0)

你基本上要求的是做eval的能力。一些动态语言(python等)支持它但不支持C.即使支持eval,您仍需要出于安全原因进行输入验证。

以下C代码使用抽象和调度表执行此操作:

#include <stdio.h>
typedef int (*func)(int op1, int op2);
struct op {
  char *opstr;
  func op_func;
};

int add_func(int op1, int op2)
{
  return op1 + op2;
}

int sub_func(int op1, int op2)
{
  return op1 - op2;
}

struct op ops[] = { {"+", add_func}, {"-", sub_func} };

int main (int argc, char const* argv[])
{
  int x = 10, y = 5, i = 0;
  char op[10];
  scanf("%s", &op);
  for(i = 0; i < sizeof(ops)/sizeof(ops[0]); i++){
    if(strcmp(ops[i].opstr, op) == 0){
      printf("%d\n", ops[i].op_func(x, y));
      break;
    }
  }
}