Условие операторов if

В десятом упражнении главы 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;
}

«Если бы у меня было больше времени, я бы написал более короткое письмо» - Марк Твен

Steve 26.10.2018 05:16

? ? ? ? Использование ненормативной лексики в истории редактирования lmfaooooo

The Wizard 26.10.2018 05:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
63
3

Ответы 3

Для односимвольных операций вы можете использовать оператор 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)>>, но решил, что не стоит.

paddy 26.10.2018 05:28

Присваивание несколько сбивает с толку, потому что оператор «+» на самом деле является строкой.

if (operation == "+")// I was told to write it like this in the book  {
      cout << operands1 + operands2 << endl;
}

Переменная operation - это переменная, содержащая буквы и слова. Мы называем этот тип переменной строковой переменной. Это меньше всего сбивает с толку.

Затем оператор if спрашивает, равно ли слово, содержащееся в переменной operation, строке «+». Это еще больше сбивает с толку, потому что мы обычно видим знак плюса как символ. В вашей программе знак плюса «+» представляет собой строку.

Итак, условное выражение в круглых скобках спрашивает, содержит ли строка операции строку «+». Если это так, то будет выполнен следующий код.

+ в следующей строке теперь является реальным символом сложения, который добавит значения в двух операндах для печати.

Чтобы понять это, вам нужно будет изучить другие примеры из вашей книги.

Удачи.

Другие вопросы по теме