#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
viastd::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
Существует довольно много алгоритмов для изменения текста и вычисления ответа