1

重複の可能性:
エラー: この単純な C コードには左辺値が必要ですか? (代入付き三項?)

次のコードでは、" " のようなエラーが発生しましたlvalue required as left operand of assignment。なぜこのようなエラーが報告されているのか理解できません。しかし(i>j)?(k=i):(k=j)、エラーを報告していないように式で括弧を使用している場合。説明してください。

int main() {
    int i = 2;
    int j = 9;
    int k;

    (i>j) ? k=i : k=j;
    printf("%d\n",k);
    return 0;
}
4

5 に答える 5

3

余分な () がなければ、演算子の優先順位は次のようにグループ化されていると思います

   ((i>j)?k=i:k)=j;

これは明らかにあなたが望むものではなく、左辺値の問題があります。

で修正します

  k= (i>j) ? i : j;

于 2012-08-22T07:34:20.170 に答える
2

この条件をより良い方法で書き直すことができることは明らかですが、=and?:演算子の優先順位のために問題が観察されます。

代入演算子?:は よりも優先順位が高い=ため、式

( i > j ) ? k = i : k = j;

に等しい

(( i > j ) ? k = i : k) = j;

式の結果に割り当てることができないため、これは正しくありません。

実際、このケースはどれが正しくないかに似て(( i > j ) : i : j) = 10;います。

于 2012-08-22T07:35:09.607 に答える
1

このように書いてみてはどうでしょうか。

int main()
 {
   int i,j,k;
   i=2;j=9;
   k = (i > j) ? i : j;
   printf("%d\n",k);
   return 0;
 }
于 2012-08-22T07:24:28.400 に答える
0

この演算子の戻り値を割り当てる必要があります。三項演算子の構文は次のとおりです。

result = condition ? first_expression : second_expression;  

あなたのコードに欠けている..したがって、次のように簡単に配置できます..

int k = (i > j) ? i : j;
于 2012-08-22T07:30:48.360 に答える
0

それよりも :

k = i > j ? i : j;
于 2012-08-22T07:25:02.917 に答える