我正在尝试这段代码:
for (i = 0; i <= 100; i *= (i = ++sqrt((double)i)))
printf ("%d ", i);
我收到以下错误:
tp.c:10:33: error: lvalue required as increment operand
for (i = 0; i <= 100; i *= (i = ++sqrt((double)i)))
它适用于此:
for (i = 0; i <= 100; i *= (i = sqrt((double)i) + 1))
printf ("%d ", i);
我不确定为什么会这样?我的猜测是++运算符需要一个变量来操作,它不能对函数返回的结果进行操作。有没有办法使用++运算符使代码工作?
答案 0 :(得分:3)
实际上; ++
需要一个变量或其他合法修改的东西(你试图修改原始类型的返回值,这是不合法的) - 一个所谓的左值。为什么不简单地使用sqrt((double)i) + 1
?
但是,您的代码中存在另一个问题,即使进行了此更正:i *= (i = sqrt((double)i) + 1)
会调用undefined behavior,因为它会修改i
两次。因此,您的代码可能会做任何事情,从提供您想要的结果到提供随机结果,以及擦除您的硬盘驱动器。你究竟想通过计算实现什么目标?