Я новичок в 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"<<;
}
}
}
У вас есть простая опечатка: if(x%5=0){
это попытка назначать От 0 до x % 5
(из-за модуля приоритета оператора вычисляется перед присваиванием). x % 5
не может быть назначен (это не lvalue), и компилятор говорит вам это.
Исправление, конечно, заключается в том, чтобы написать x % 5 == 0
,
Вам повезло в этом случае, что ошибка обнаружена в время компиляции. Что-то вроде if (n = 0)
(в строке 18) не может быть, так как x = 0
является выражение со значением 0.
Два способа защититься от этого:
-Wall -Wextra
и этой комбинации достаточно, чтобы поймать эту общую проблему.if (0 == x)
со странствующим if (0 = x)
будет взято во время компиляции как попытка назначить 0
, Лично я нахожу это запутывающим.Оператор присваивания требует lvalue означает, что левый операнд должен быть переменной / местоположением, которое может содержать значение.
Это то, что подразумевается под ошибкой.
То, что вам нужно в вашем утверждении if == скорее всего не назначение, как указано в других ответах
Вы должны использовать == в условиях (while, if, …) для проверки равенства в C ++.
если (х% 5 = 0)
должно быть
если (х% 5 == 0)
«x% 5» не является lvalue в том смысле, что вы не можете присвоить ему значение, поэтому ошибка.