Паскаль — ошибка C ++; «lvalue требуется в качестве левого операнда присваивания»;

Я новичок в C ++, и у меня есть проблема, где я должен преобразовать псевдокод на языке C ++ / C / Pascal. Ответ в конце книги написан на Паскале.

Проблема в моем коде C ++ состоит в том, что в строке 12 я получаю сообщение об ошибке, которое можно найти в заголовке. Любая идея?

Код Паскаля:

var n,x:integer;
begin
n:=0;
repeat
write('x=');read(X);
if x<>0 then
if x mod 5 = 0 then
n:=n+1
else
n:=n-1;
until x=0;
if n=0 then
write('yes')
else
write('no')
end;

Мой код C ++:

int main()
{
int x,n;
cin>>x;
while(x>0)
{
if(x>0)
{
if(x%5=0){
n=n+1;
} else {
n=n-1;
}
}
if(n=0){
cout<<"Yes"<<;
} else {
cout<<"No"<<;
}
}

}

-4

Решение

У вас есть простая опечатка: if(x%5=0){ это попытка назначать От 0 до x % 5 (из-за модуля приоритета оператора вычисляется перед присваиванием). x % 5 не может быть назначен (это не lvalue), и компилятор говорит вам это.

Исправление, конечно, заключается в том, чтобы написать x % 5 == 0,

Вам повезло в этом случае, что ошибка обнаружена в время компиляции. Что-то вроде if (n = 0) (в строке 18) не может быть, так как x = 0 является выражение со значением 0.

Два способа защититься от этого:

  • Убедитесь, что предупреждения вашего компилятора настолько агрессивны, насколько это возможно. С gcc я пользуюсь -Wall -Wextraи этой комбинации достаточно, чтобы поймать эту общую проблему.
  • Некоторые разработчики напишут if (0 == x) со странствующим if (0 = x) будет взято во время компиляции как попытка назначить 0, Лично я нахожу это запутывающим.
2

Другие решения

Оператор присваивания требует lvalue означает, что левый операнд должен быть переменной / местоположением, которое может содержать значение.
Это то, что подразумевается под ошибкой.
То, что вам нужно в вашем утверждении if == скорее всего не назначение, как указано в других ответах

0

Вы должны использовать == в условиях (while, if, …) для проверки равенства в C ++.

0

если (х% 5 = 0)

должно быть

если (х% 5 == 0)

«x% 5» не является lvalue в том смысле, что вы не можете присвоить ему значение, поэтому ошибка.

0
По вопросам рекламы [email protected]