C++: выражение должно быть модифицируемым lvalue

Я делаю текстовый простой калькулятор операций/триггеров. Я получаю сообщение об ошибке: «Выражение должно быть модифицируемым lvalue», когда я пытаюсь возвести в квадрат переменные. Вот мой текущий код: (ошибка выделяет sqrt)

double a, b, result;

cout << "Please enter your two side lengths (ex:12 5)";
cin >> a, b;
sqrt(pow(a, 2) + pow(b, 2)) = result;

cout << result << endl;

Приносим извинения за любые ошибки форматирования, первый вопрос, заданный здесь, приветствуется любая помощь. Благодарю вас!


person Lindy    schedule 10.08.2016    source источник
comment
попробуй result = sqrt(....);   -  person markgz    schedule 10.08.2016


Ответы (4)


Измените оператор cin на cin >> a >> b;, это считывает несколько значений одновременно, поскольку для cin не существует оператора запятой. Кроме того, измените порядок переменной результата с правой стороны присваивания на левую. Два операнда = в присваивании — это l-значения, обозначающие левые значения, которые должны быть слева, и r-значения, обозначающие правые значения, которые должны быть справа. Переключите их, и вы получите ошибку.

Ваш новый модифицированный код

double a, b, result;

cout << "Please enter your two side lengths (ex:12 5)";

cin >> a >> b; //<-- See '>>' here

//sqrt(pow(a, 2) + pow(b, 2)) = result; <-- switch these to...

result = sqrt(pow(a, 2) + pow(b, 2)); //<-- ...this
cout << result << endl;

Живой пример

person Arnav Borborah    schedule 10.08.2016
comment
Оператор "запятая". :) - person Jonny Henly; 10.08.2016
comment
Ах да, я сделал это в других частях моей программы, но пропустил это здесь. Спасибо за решение ошибки, прежде чем я знал, что она у меня есть! - person Lindy; 10.08.2016
comment
А, хорошо, я знаю оператор запятой там, но не иначе. - person Arnav Borborah; 10.08.2016

Во-первых, cin >> a, b не делает того, что вы думаете. Лучше напишите cin >> a >> b.

Затем вы назначаете данные переменным, а не переменные данным. Так что result = sqrt(...).

person ForceBru    schedule 10.08.2016

Вы переключили свое задание. Вы пытаетесь присвоить функции sqrt значение результата; вы хотите присвоить результат значению вывода sqrt:

double a, b, result;

cout << "Please enter your two side lengths (ex:12 5)";
cin >> a, b;
result = sqrt(pow(a, 2) + pow(b, 2));

cout << result << endl;
person Cameron637    schedule 10.08.2016

Основная проблема — это номера строк 4 и 5 вашего фрагмента кода.

cin >> a,b; неправильно. Вы можете ввести несколько входных данных в строку, подобную этой cin >> a >> b;

А в строке номер 5 вы делаете присваивание в неправильном порядке. Вы должны просто перевернуть его result таким образом result = sqrt(pow(a, 2) + pow(b, 2)) ;

person Shravan40    schedule 10.08.2016