Выражение должно быть изменяемым значением в C - PullRequest
0 голосов
/ 07 февраля 2019
void lowerit(char line[])
{
    int i;
    for (i = 0; line[i] != '\0'; ++i)
    {
        (line[i] >= 'A' && line[i] <= 'Z') ? line[i] = line[i] - 'A' + 'a' : line[i] = line[i];
    }
}

Довольно простой код. По какой-то причине я получаю ошибку в Visual Studio в начале цикла for.(Строка [i] <--- это вызывает ошибку «Выражение должно быть изменяемым значением». Что я делаю не так? </p>

1 Ответ

0 голосов
/ 07 февраля 2019

Вам необходимо записать троичное условное выражение как

line[i] = line[i] >= 'A' && line[i] <= 'Z' ? line[i] - 'A' + 'a' : line[i];

, хотя, поскольку ветвь : не используется, простой if предпочтительнее.

Потому что = и троичное условное выражение имеют одинаковый приоритет и ассоциативность (хотя последнее можно считать вымышленно повышенным, поскольку средняя часть оценивается так, как если бы оно было в скобках), выражение, которое вы имеете, не сгруппировано так, как вы ожидаете,который объясняет диагностику компилятора.На самом деле он сгруппирован как

((line[i] >= 'A' && line[i] <= 'Z') ? line[i] = line[i] - 'A' + 'a' : line[i]) = line[i];

, что, что интересно, является допустимым C ++, но не допустимым C.

Наконец, написанное вами выражение выглядит как непереносимая версиястандартная библиотечная функция tolower, которую вы должны использовать вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...