Ошибка «lvalue требуется как левый операнд присваивания» - PullRequest
2 голосов
/ 16 июня 2010

Следующий код выдает «lvalue, требуемый как левый операнд присваивания»

if( c >= 'A' && c <= 'Z'  || c = " " || c = ",") {

Я предполагаю, что я пишу это неправильно, что не так? и как бы правильно написать?

Ответы [ 4 ]

11 голосов
/ 16 июня 2010

Вы должны использовать одинарные кавычки для символов и делать двойное равенство для равенства (в противном случае это меняет значение c)

if( c >= 'A' && c <= 'Z'  || c == ' ' || c == ',') {

Более того, вы можете рассмотреть что-то подобное, чтобы сделать вашу логическую логику более понятной:

if( (c >= 'A' && c <= 'Z')  || c == ' ' || c == ',') {

Хотя ваша логическая структура работает аналогично (&& имеет приоритет над ||), подобные вещи могут сбить вас с толку в будущем.

4 голосов
/ 16 июня 2010

равенство ==, = это присвоение.Вы хотите использовать ==.Также "" - это char*, одинарные кавычки делают символ.

Кроме того, добавление нескольких символов в ваше условие сделает ваш код намного проще для чтения.Вот так

 ((x == 'c' && y == 'b') || (z == ',') || (z == ' '))
2 голосов
/ 16 июня 2010

= является оператором присваивания, а не оператором сравнения.Вы ищете ==.

0 голосов
/ 20 марта 2015

Лично я предпочитаю минималистический стиль:

((x == 'c' && y == 'b') || (z == ',') || (z == ' '))

(  x == 'c'  &&  y == 'b'   ||   z == ','   ||   z == ' '  )

или

(  x == 'c'  &&  y == 'b'  ?  z == ','  :  z == ' '  )

против

( x == 'c' && y == 'b' ? z == ',' : z == ' ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...