void main()
{
char c;
int op;
int a=10,b=20,sum;
scanf("%c",&c);
if(c=='+')
op=1;
else if(c=='-')
op=2;
else if(c=='*')
op=3;
switch(op)//here i used switch but i don't want to use it
{
case 1: sum=a+b;
break;
case 2: sum=a-b;
break;
case 3: sum=a*b;
break;
}
printf("%d",sum);
}
当c包含c时,输出应为30 总和应该包含30 acb应评估为a + b,它应包含30
答案 0 :(得分:4)
我并不是说这是一种好的做事方式,但你可能会有这样的事情:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
typedef int (*fn)(int, int);
int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }
int main(void) {
int a = 10, b = 20, sum;
char c;
fn f[256] = {NULL};
f['+'] = add;
f['-'] = subtract;
// etc
scanf("%c", &c);
fn fn = f[(int)c];
assert(fn != NULL);
sum = fn(a, b);
printf("%d\n", sum);
return EXIT_SUCCESS;
}
但实际上,只需要使用switch
语句。
答案 1 :(得分:3)
你可以这样做:
void main()
{
char c;
int a=10,b=20,sum;
scanf("%c",&c);
sum=(c=='+')?(a+b):((c=='-')?(a-b):((c=='*')?(a*b):0));
printf("%d",sum);
}
不要与行sum=(c=='+')?(a+b):((c=='-')?(a-b):((c=='*')?(a*b):0));
混淆。它实际上是这样做的:
if(c=='+')
sum=a+b;
else
{
if(c=='-')
sum=a-b;
else
{
if(c=='*')
sum=a*b;
else
sum=0;
}
}
运算符(?:)称为条件(三元)运算符。
其语法:
condition ? expression1 : expression2
如果条件为真,则返回expression1。否则将返回表达式2。如您所见,该行中使用了3个嵌套条件运算符。
详细了解条件运算符here。
答案 2 :(得分:2)
当涉及到C时,不可能通常太强大了。在功能编程方面,它总是太强大。
#include <stdio.h>
int (*ops[5])(int,int);
int mul(int f, int s) { return f*s; }
int plus(int f, int s) { return f+s; }
int main(int argc, char** argv)
{
ops[0] = &mul;
ops[1] = +
printf("%u + %u = %u\n", 5, 10, ops['+' - 42](5, 10));
return 0;
}
ops是一个函数指针数组(每个都有两个整数并返回一个,这是int上标准操作的类型)。 '*'的ASCII码是42(巧合!),'+'是43,依此类推。 ops [0] =&amp; mul初始化ops以包含将两个数相乘的函数的地址。然后在printf中,ops由要应用的运算符的字符代码减去第一个运算符的索引,即调用相应的函数并传递所需的参数。不幸的是,四个基本artihmetic运算符的四个ASCII码的间隔不连续(44不是运算符),因此阵列需要5个元素。这种技术被称为查找表,如果我知道如何获取内置+函数的地址而不是为它定义包装器,它可以做得更好。
答案 3 :(得分:1)
对不起,您无法将char
转换为运营商。如果您想根据输入采取不同的操作,必须分支。
如Matteo Italia和Jens Gustedt所述,您可以让您的开关更加紧凑。
scanf("%c",&c);
switch(c) {
case '+': sum = a + b; break;
case '-': sum = a - b; break;
case '*': sum = a * b; break;
default: break; /* invalid op? */
}
答案 4 :(得分:1)
char c;
int a=10, b=20, result=0;
scanf("%c", &c);
c=='+' && (result = a + b);
c=='-' && (result = a - b);
c=='*' && (result = a * b);
printf("%d", result);
答案 5 :(得分:0)
如果没有一些切换/检查,那么在C / C ++中是不可能的。