ОБНОВЛЕНИЕ: В соответствии с вашим другим комментарием ваше выражение неверно - оно не имеет ничего общего с «пока», имеющим несколько условий.
ch != '\n' || ch != ' '
ВСЕГДА ИСТИНА, независимо от характера.
Если символ НЕ является пробелом, второе условие истинно, так что OR является истинным.
Если символ является пространством, первое условие истинно (поскольку пространство не является символом новой строки), а OR - true.
Правильный путь ch != '\n' && ch != ' ' ...
OLD Ответ:
В нормальных условиях нет никаких проблем вообще с выражением выше (при условии, что вы хотели сделать именно это).
Единственная проблема с вашей заключается в том, что она иногда может быть менее оптимальной (например, если b и c никогда не меняются по всему циклу, в этом случае вам нужно кэшировать значение b!=1
в переменной).
while
с несколькими условиями может иметь проблему в одном случае - если эти несколько условий на самом деле предназначены побочные эффекты.
Это связано с ленивой оценкой || и & & в C, так что если первое выражение истинно, остальные НЕ будут оценены, и поэтому их побочные эффекты не будут выполняться.
Есть ли более подробная информация по этому вопросу? – Eric
Приоритет оператора? – Eilon
Я отредактировал вопрос, чтобы включить важную информацию из комментариев. –