2

重複の可能性:代入の左オペランドとして左辺値が必要です
代入の左オペランドとして
左辺値が必要です (C プログラム)

コードでこのエラーが発生していますが、その理由がわかりません。助けてください!エラーは次のとおりです。

エラー: '=' トークンの前にプライマリ式が必要です

これは、私が問題を抱えている私のコードの一部です。a と b は、以前に int として宣言されていました。

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

=代入演算子で、等価性==をテストしてブール値を返します。

代入演算子は論理積 ( ) よりも優先順位&&が低いため、次のように読み取られます。

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

これが、左辺値エラーが報告されている理由です。

于 2012-10-18T20:55:14.223 に答える
2

割り当ての優先順位が低いため、あなたが書いたもの:

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

次のように解釈されます。

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

左辺値ではないことがわかります。の平方根を に割り当てたい場合はijおそらく次のように記述します。

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

jそれが浮動小数点変数であると仮定します。整数型の場合は0、代わりに を使用し0.0ます。それ以外の場合は、次のように記述します。

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

これは明示的な等価比較を行います。

于 2012-10-18T20:58:17.550 に答える
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 に答える
1

以下のように条件を書きます。

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

それ以外の

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

この=記号は代入演算子であり、比較演算子ではありません。をチェックする必要がありますif。左辺は右辺と同じです。

于 2012-10-18T20:56:14.067 に答える