Pourquoi je reçois
lvalue required as left operand of assignment
avec une seule comparaison de chaîne? Comment puis-je résoudre ce problème dans C
?
if (strcmp("hello", "hello") = 0)
Merci!
Vous devez comparer et non attribuer:
if (strcmp("hello", "hello") == 0)
^
Parce que vous voulez vérifier si le résultat de strcmp("hello", "hello")
est égal à 0
.
A propos de l'erreur:
valeur requise en tant qu'opérande gauche de affectation
lvalue
signifie une valeur assignable (variable) et, dans l'affectation, la valeur de gauche du =
doit être lvalue
(assez claire).
Les résultats de fonction et les constantes ne sont pas assignables (rvalue
s), ils sont donc rvalue
s. donc l'ordre n'a pas d'importance et si vous oubliez d'utiliser ==
, vous obtiendrez cette erreur. (edit:) Je considère comme une bonne pratique en comparaison de mettre la constante dans le côté gauche, donc si vous écrivez =
au lieu de ==
, vous obtiendrez une erreur de compilation. par exemple:
int a = 5;
if (a = 0) // Always evaluated as false, no error.
{
//...
}
vs.
int a = 5;
if (0 = a) // Generates compilation error, you cannot assign a to 0 (rvalue)
{
//...
}
(Voir la première réponse à cette question: https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined )
Vous ne pouvez pas affecter une valeur à une valeur.
if (strcmp("hello", "hello") = 0)
est faux. Suggestions:
if (strcmp("hello", "hello") == 0)
^
=
est l'opérateur assign .==
est le égal à opérateur.
Je sais que beaucoup de nouveaux programmeurs sont confus avec ce fait.
Remplacez =
par ==
I.e if (strcmp("hello", "hello") == 0)
Vous voulez comparer le résultat de strcmp()
à 0. Vous avez donc besoin de ==
. L'affecter à 0 ne fonctionnera pas car il est impossible d'attribuer des valeurs rvalues.
Vous essayez d'affecter une valeur à une fonction, ce qui n'est pas possible en C. Essayez plutôt l'opérateur de comparaison
if (strcmp("hello", "hello") == 0)
J'ai trouvé que la réponse à ce problème en mathématiques est que l'opérateur sur le côté gauche doit être la variable que vous essayez de modifier. La logique ne peut pas venir en premier.
coin1 + coin2 + coin3 = coinTotal; // Wrong
coinTotal = coin1 + coin2 + coin3; // Right
Ce n'est pas une réponse directe à votre question, mais cela pourrait être utile aux futurs utilisateurs de Google qui font la même chose que moi.
if (strcmp("hello", "hello") = 0)
Essaie d'attribuer la valeur 0 à la fonction, ce qui n'est pas la valeur lvalue.
Les valeurs de retour de fonction ne sont pas lvalue (pas de stockage), donc toute tentative d'attribution de valeur à quelque chose qui n'est pas lvalue entraîne une erreur.
Il est recommandé d’éviter de telles erreurs si les conditions consistent à utiliser une valeur constante du côté gauche de la comparaison. Ainsi, même si vous utilisez "=" à la place "==", une constante qui n’est pas lvalue donnera immédiatement une erreur et évitera l’affectation accidentelle de valeurs et causera de faux positif si condition.