Вам необходимо записать троичное условное выражение как
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
, которую вы должны использовать вместо.