Как правильно реализовать и получить доступ к различным настраиваемым перечислителям операторов? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь создать несколько перечислений, чтобы быстро сравнить проанализированные токены на основе приоритета.

Это код, который у меня пока есть в main. cpp:

    enum openParen0 : char { op = '(', ob = '[', oc = '{' };
    enum closedParen0 : char { cp = ')', cb = ']', cc = '}' };
    enum oper1 : char { plus = '+', minus = '-' };
    enum oper2 : char { mult = '*', div = '/', mod = '%' };

    openParen0 Open = op;
    closedParen0 Closed = cp;
    oper1 Operator1 = plus;
    oper2 Operator2 = mult;

    int problem, num1 = 5, num2 = 2;
    problem = Open + num1 + Operator1 + num1 + Closed + Operator2 + num2;

    cout << Open << num1 << " " << Operator1 << " " << num1 << Closed << " " << Operator2 << " " << num2 << " =" << endl;
    cout << problem;

Мне просто интересно, как изменить мой код, чтобы я правильно выводил вычисления на основе перечислений. Я новичок в этой концепции, поэтому я просто пытаюсь понять ее.

Вот код, который я получаю:

(5 + 5) * 2 =
178

Очевидно, я ожидаю, вместо этого:

(5 + 5) * 2 =
20

Спасибо.

1 Ответ

1 голос
/ 24 февраля 2020

Когда вы пытаетесь использовать cout<<op;, на выходе получается значение ASCII, соответствующее "("

Тип char - это целочисленный тип, который обычно содержит члены базового набора символов выполнения c - By по умолчанию это ASCII в Microsoft C ++.

Согласно Do c:

type

Базовый тип перечислителей ; все перечислители имеют один и тот же базовый тип. Может быть любым целочисленным типом.

Насколько мне известно, вы не можете напрямую перечислять символы.

...