Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c中的枚举运算符(+;,-,*,/)_C_Enums - Fatal编程技术网

c中的枚举运算符(+;,-,*,/)

c中的枚举运算符(+;,-,*,/),c,enums,C,Enums,我想创建一个包含运算(+、-/、*)的枚举。 诸如此类 enum运算符{plus=“+”,减号=“-”,multy=“*”,div=“/”} 或者类似上面的东西 我想将其与字符串进行比较,例如(当input=“+”): 任何想法都会有帮助 提前感谢。枚举是int,字符常量也是C中的int,因此您可以这样做: enum operators { plus = '+', minus = '-', mult = '*', div = '/' }; 如果您有一个名为input的字符串(字符数组),您可以

我想创建一个包含运算(+、-/、*)的枚举。 诸如此类

enum运算符{plus=“+”,减号=“-”,multy=“*”,div=“/”}

或者类似上面的东西

我想将其与字符串进行比较,例如(当input=“+”):

任何想法都会有帮助


提前感谢。

枚举
是int,字符常量也是C中的int,因此您可以这样做:

enum operators { plus = '+', minus = '-', mult = '*', div = '/' };
如果您有一个名为
input
的字符串(字符数组),您可以这样做测试:

if (input[0] == plus)
    printf("ok");
您更可能在switch语句中使用它:

switch (input[0]) {
case plus:
    // do something
    break;
case minus:
    // do something
    break;

等等。

enum
是整数类型的别致名称<代码>“+”
是字符串,而不是整数

使用:

或者,您可以简单地使用:

enum operators { plus, minus, multy, div };

值将是不同的,但编号将从0开始。

您使用的符号(即op.plus)对于枚举不正确。它将用于
struct
表示法

但是,您可以这样做:
注意,我没有使用字符串,我使用的是
char
int
,它们更容易稍后集成到
switch()
语句中。)

#包括

enum运算符{
加号=“+”,//加法==43
减号='-',//减号==45
mult='*',//mult==42
divi='/',//div==47
};
内部主(空)
{
INTA,b;
char op;
printf(“输入\“+\”、\“-\”、\“*\”或\“/\”\n”);
scanf(“%c”和&op);
printf(“输入两个由空格分隔的整数值,\n”);
scanf(“%d%d”、&a和&b);
开关(op){
案例补充:
printf(“%d+%d==%d\n”,a,b,a+b);
打破
减号:
printf(“%d-%d==%d\n”,a,b,a-b);
打破
案例多:
printf(“%d*%d==%d\n”,a,b,a*b);
打破
案件组一:
printf(“%d/%d==%d\n”,a、b、a/b);
打破
}
getchar();
getchar();
返回0;
}

请注意,因为这是整数运算,所以像5/2==2这样的东西并不有趣,但我如何将它与类似于枚举运算符op的字符串进行比较;扫描频率(“%s”,输入);如果(strcmp(input,op.plus)==0{printf(“\nok”);当input=“+”;@csgk-你能读入
字符吗?),如果是这样,那么你可以简单地测试你的
输入值=='+'
(等等)。您的strcmp想法也有效,正如您所描述的。这完全取决于您。我将其作为字符读取,不适用于上述代码。我得到编译器错误…?input='+'无效您将得到编译器警告have尝试一下,当然输入==“+”不起作用。@csgk-如果你想使用字符串,那么你必须到处使用它们,也就是说,不要用枚举来定义操作类型,而是用一个包含字符串成员的结构(例如char add[2]={“+”};等等),然后当你
scanf(“%s”,input)
时,你的
strcmp(input,add);
将==0。(如果用户输入一个“+”+1来指出“+”和“+”之间的差异。我无法计算我被发现的次数。阅读您的编辑,回答如下。
enum operators { plus = '+', minus = '-', multy = '*', div = '/' };
enum operators { plus, minus, multy, div };
enum operator {
    plus = '+', //add == 43
    minus = '-', //minus == 45
    mult = '*', //mult == 42
    divi = '/', //div == 47
};



int main(void)
{
    int a, b;
    char op;

    printf("enter \"+\", \"-\", \"*\" or \"/\"\n");
    scanf("%c", &op);
    printf("enter 2 integer values separated by a space, <return>\n");
    scanf("%d%d", &a, &b);
    switch(op) {
        case plus:
            printf("%d + %d == %d\n", a, b, a+b);
            break;
        case minus:
            printf("%d - %d == %d\n", a, b, a-b);
            break;
        case mult:
            printf("%d * %d == %d\n", a, b, a*b);
            break;
        case divi:
            printf("%d / %d == %d\n", a, b, a/b);
            break;
    }
    getchar();
    getchar();

    return 0;
}