Калькулятор C , каким методом вычислять

#c

#c

Вопрос:

Я пытаюсь создать калькулятор.
Кажется, что для того, чтобы сделать добавление, вы должны объявить переменные x, y, а затем добавить их sum = x y .
Мой вопрос заключается в следующем, поскольку вы можете сказать cout << (2 6) ; и получить результат 8, почему вы не можете этого сделать:
Определите переменную a с правильным типом данных и выполните
cin >> a ; введите 2 6, затем получите
cout<<(a) ; с результатом 8, поскольку переменная была определена как 2 6, почему это не работает?

Комментарии:

1. Решающим моментом является «с правильным типом данных» . Для этого не существует стандартного типа данных.

2. C является скомпилированным языком и не имеет динамической оценки выражений

3. Конечно, вы можете это сделать. При условии, что a это действительно правильный тип данных. В этом случае a необходимо понимать, как принимать входные данные от cin via std::istream и как интерпретировать предоставленный пользовательский запрос (в вашем случае — ввод 2 6 ). А затем иметь возможность выводить результат вычисления в cout . Все, что вам нужно, это указать «правильный тип данных», который (скорее всего) был бы class вашим собственным дизайном для этой работы

4. Кстати, вы можете искать что-то похожее на eval() то, что, к сожалению, c не поддерживает

Ответ №1:

Как простой указатель, как это решается в c

 int main() {
    int a = 0;
    int b = 0;
    std::string op;

    std::cin >> a >> op >> b;
    if(op == " ") {
        std::cout << a   b;
    }
    if(op == "-") {
        std::cout << a - b;
    }
    // ...
}
 

Комментарии:

1. Хромает. Вы смешиваете текстовое представление " " , где должно использоваться перечисление (по крайней мере, в этом случае, если вы не используете ассоциативный контейнер для сопоставления идентификатора с его операцией). В конце концов, мы здесь не пишем Javascript.

2. @BartekBanachewicz Что? Я сказал простой указатель. Вы, конечно, можете предоставить сложный, непонятный ответ (для новичка), описывающий более сложный синтаксический анализатор в вашем ответе.

3. Такие «простые» указатели приводят к тому, что программисты не понимают преимуществ правильного статического описания данных в долгосрочной перспективе. Нет ничего сложного в правильном вводе ваших данных; есть только лень и недостаток понимания, которые заставляют людей это делать. Суть в том, что вы не должны заглушать свои ответы только потому, что OP — новичок.

Ответ №2:

Вам нужно проанализировать входные данные.

это довольно сложно, и вам также необходимо изменить префикс на обратную польскую нотацию, чтобы учесть скобки и т.д.

Видишь http://en.wikipedia.org/wiki/Reverse_Polish_notation

Существует довольно много алгоритмов для изменения текста и вычисления ответа