В десятом упражнении главы 3 этой книги, которую я пытаюсь пройти, меня попросили написать программу, которая выполняет операцию, за которой следуют два операнда, и выводит результаты. Считайте операцию в строке с именем operations и используйте оператор if, чтобы выяснить, какую операцию хочет пользователь. Считайте операнды в переменные типа double. Реализуйте это для операций, называемых +, -, *, /, вы знаете (плюс, минус, умножение, деление) очевидное.
Это то, что я написал до сих пор, и это сработало, и все, кроме моих проблем, - это концепция условия в операторах if. Насколько я понимаю, оператор if имеет круглые скобки, внутри которых находятся условия, при которых значения проверяются, чтобы увидеть, являются ли они истинными или ложными. Только после этого компьютер решил, запускать код или нет. Итак, скажите мне, почему я должен записывать операцию, равную оператору, в качестве условий, когда мне все равно нужно использовать оператор в cout, чтобы получить результаты двух входных значений? Я этого не понимаю, разве нет лучшего способа написать это с меньшим количеством утверждений?
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
string operation = "";
double operands1;
double operands2;
cout << "Give me either a minus, plus, division, or multiplication operations \n";
cin >> operation;
cout << " enter the value you would like to \n";
cin >> operands1;
cout << " enter the second value you would like to \n";
cin >> operands2;
if (operation == "+")// I was told to write it like this in the book {
cout << operands1 + operands2 << endl;
}
else if (operation == "*") {
cout << operands1*operands2 << endl;
}
else if (operation == "-") {
cout << operands1 - operands2 << endl;
}
else if (operation == "/") {
cout << operands1 / operands2 << endl;
}
else {
cout << " seriously dude im talking about numbers over here \n";
}
return 0;
}
? ? ? ? Использование ненормативной лексики в истории редактирования lmfaooooo
Для односимвольных операций вы можете использовать оператор switch:
switch (c) {
case '+' : std::cout << op1 + op2 << std::endl; break;
case '*' : ...
...
default : std::cout << "my dud!" << std::endl;
}
Если вас волнует количество операторов, вы также можете использовать уродливый тернарный оператор:
std::cout << (c= = "+" ? op1+op2 : c= = "*" ? op1*op2 : "DUDEEE!") << std::endl;
Если вы спрашиваете, почему вы не можете сделать что-то подобное:
cout << operands1 operation operands2 << endl;
Это потому, что язык структурирован не так. Вы не можете поместить переменную в место, где мог бы находиться оператор, и ожидать, что она будет заменена. Предположим, operation
не содержит операнда. Что тогда будет?
Теперь у вас есть самый простой способ справиться с этим.
Я пришел к такому же выводу, что они спрашивают именно об этом. Я подумывал написать шутливый ответ, используя std::map<std::string, std::function<double(double,double)>>
, но решил, что не стоит.
Присваивание несколько сбивает с толку, потому что оператор «+» на самом деле является строкой.
if (operation == "+")// I was told to write it like this in the book {
cout << operands1 + operands2 << endl;
}
Переменная operation
- это переменная, содержащая буквы и слова. Мы называем этот тип переменной строковой переменной. Это меньше всего сбивает с толку.
Затем оператор if спрашивает, равно ли слово, содержащееся в переменной operation
, строке «+». Это еще больше сбивает с толку, потому что мы обычно видим знак плюса как символ. В вашей программе знак плюса «+» представляет собой строку.
Итак, условное выражение в круглых скобках спрашивает, содержит ли строка операции строку «+». Если это так, то будет выполнен следующий код.
+
в следующей строке теперь является реальным символом сложения, который добавит значения в двух операндах для печати.
Чтобы понять это, вам нужно будет изучить другие примеры из вашей книги.
Удачи.
«Если бы у меня было больше времени, я бы написал более короткое письмо» - Марк Твен