我是C的新手并且在Project Euler上启动问题,无法理解错误,所以会感激任何帮助。
while (i < 10)
{
if (i % 3 = 0);
printf("%d", i);
if (i % 5 = 0);
printf("%d", i);
i++;
}
“表达式必须是可修改的左值”
是错误。
答案 0 :(得分:4)
当您使用=
(即等于运算符)时,您正在使用==
,它是赋值运算符。
您收到错误是因为您尝试将值分配给i % 3
,这不是您可以分配的内容。
在C中有rvalues,它们是无法赋值的表达式,而lvalues是可以赋值的表达式。换句话说,左值可以出现在赋值的左侧,右值只出现在右侧。
此外,您的每个;
语句后面都有一个if
,这意味着它们的主体空白。摆脱那些。
while (i < 10)
{
if (i % 3 == 0)
printf("%d", i);
if (i % 5 == 0)
printf("%d", i);
i++;
}
答案 1 :(得分:1)
首先,由于operator precedence,您的代码看起来像
if ( (i % 3) = 0);
现在,您使用的=
是一个赋值运算符,根据C11
,章节§6.5.16
赋值运算符应具有可修改的左值作为其左操作数。
OTOH,模运算符(%
)的结果不是可修改的左值,因此您不断收到错误。
您需要将=
更改为==
,稍后再将其作为Equality运算符。
也就是说,;
语句末尾的if
也是你可能不想要的。如果希望;
语句作为printf()
条件语句(正文),则需要删除尾随if
。