在C中使用++运算符时出错

时间:2015-10-28 23:40:24

标签: c for-loop

我正在尝试这段代码:

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);

我不确定为什么会这样?我的猜测是++运算符需要一个变量来操作,它不能对函数返回的结果进行操作。有没有办法使用++运算符使代码工作?

1 个答案:

答案 0 :(得分:3)

实际上; ++需要一个变量或其他合法修改的东西(你试图修改原始类型的返回值,这是不合法的) - 一个所谓的左值。为什么不简单地使用sqrt((double)i) + 1

但是,您的代码中存在另一个问题,即使进行了此更正:i *= (i = sqrt((double)i) + 1)会调用undefined behavior,因为它会修改i两次。因此,您的代码可能会做任何事情,从提供您想要的结果到提供随机结果,以及擦除您的硬盘驱动器。你究竟想通过计算实现什么目标?