2

可能重复:
需要左值作为赋值的
左操作数 需要左值作为赋值的左操作数(C 程序)

我的代码出现此错误,我不知道为什么。请帮忙!错误是:

错误:“=”标记之前的预期主表达式

这是我遇到问题的代码的一部分。a 和 b 之前已经声明为整数。

   int i = 0;
   for( i == a; i < = b; i = i + 1)  // ERROR IS IN THIS LINE
   {  int j = 1;
      int N = static_cast<int>(sqrt(i));

      for( j = 1; j < = N; j = j + 1)   // ERROR IS IN THIS LINE
      {  int P = i%j;
         if( P == 0 && j!= 1 && j!= i)
         {  j = N + 1;
         }
         if( P != 0 && j == N)
         {  cout << i << "is prime" << endl;
         }                                         
      }
   }                                                     
4

5 回答 5

3

我想你打算这样做

if( P != 0 && j == sqrt(i))

=赋值运算符,==测试等价并返回布尔值。

赋值运算符的优先级低于逻辑 AND ( &&),因此它被读作

(P != 0 && j) = sqrt(i)

这就是报告左值错误的原因。

于 2012-10-18T20:55:14.223 回答
2

您不能在 <= 运算符中放置空格:

i < = b;

变成

i <= b; 
于 2012-10-18T21:10:39.307 回答
2

我会一起玩的。两种情况下的“错误”都是相同的:

for( i == a; i < = b; i = i + 1)  // ERROR IS IN THIS LINE
...
for( j = 1; j < = N; j = j + 1)   // ERROR IS IN THIS LINE

错误是“< =”,它不是运算符,也不是有效的 C 或 C++。旁注,第一个循环中的 'i == a' 是无操作的。

于 2012-10-18T21:11:00.570 回答
2

由于分配的优先级较低,您写的内容:

if (P != 0 && j = sqrt(i))

被解释为:

if ((P != 0 && j) = sqrt(i))

你可以看到这不是左值。i如果你想分配to的平方根j,你可能应该写:

if (P != 0 && (j = sqrt(i)) != 0.0)

假设这j是一个浮点变量;如果是整数类型,请使用0. 0.0否则,你应该写:

if (P != 0 && j == sqrt(i))

它进行了明确的相等比较。

于 2012-10-18T20:58:17.550 回答
1

写下条件。

if( (P != 0) && (j == sqrt(i)) ) 

代替

if( P != 0 && j = sqrt(i))

这个=符号是赋值运算符,而不是比较运算符。您需要检查if,左侧等于右侧。

于 2012-10-18T20:56:14.067 回答