なぜ私は得ているのですか
lvalue required as left operand of assignment
単一の文字列比較で?でこれを修正するにはどうすればよいC
ですか?
if (strcmp("hello", "hello") = 0)
ありがとう!
割り当てるのではなく、比較する必要があります。
if (strcmp("hello", "hello") == 0)
^
strcmp("hello", "hello")
の結果が と等しいかどうかを確認したいからです0
。
エラーについて:
代入の左オペランドとして必要な左辺値
lvalue
は代入可能な値 (変数) を意味し、代入では の左の値は(かなり明確)=
でなければなりません。lvalue
関数の結果と定数はどちらも代入可能 ( rvalue
) ではないため、rvalue
です。したがって、順序は関係ありません。使用するのを忘れると==
、このエラーが発生します。(編集:)定数を左側に置くのと比較して良い習慣だと思うので、の代わりに書くと=
コンパイル==
エラーが発生します。例えば:
int a = 5;
if (a = 0) // Always evaluated as false, no error.
{
//...
}
対。
int a = 5;
if (0 = a) // Generates compilation error, you cannot assign a to 0 (rvalue)
{
//...
}
(この質問に対する最初の回答を参照してください: https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined )
右辺値に右辺値を割り当てることはできません。
if (strcmp("hello", "hello") = 0)
間違っている。提案:
if (strcmp("hello", "hello") == 0)
^
=
代入演算子です。
==
等しい演算子です。
多くの新しいプログラマーがこの事実に混乱していることを私は知っています。
すなわち
=
に変更==
if (strcmp("hello", "hello") == 0)
の結果を 0 と比較したいstrcmp()
ので、 が必要==
です。右辺値を割り当てることができないため、0 に割り当てても機能しません。
関数に値を割り当てようとしていますが、これは C では不可能です。代わりに比較演算子を試してください。
if (strcmp("hello", "hello") == 0)
数学を扱うときのこの問題への答えは、左側の演算子が変更しようとしている変数でなければならないということです。ロジックを優先することはできません。
coin1 + coin2 + coin3 = coinTotal; // Wrong
coinTotal = coin1 + coin2 + coin3; // Right
これはあなたの質問に対する直接的な回答ではありませんが、私がググったのと同じことをググる将来の人々に役立つかもしれません.