ПочемуПочему `while ((ch = getchar())! = EOF)` общая идиома?
while ((ch = getchar()) != EOF) {
// stuff
}
чаще/предпочтительным/считается лучше, чем ниже?
ch = getchar();
while (ch != EOF) {
// stuff
ch = getchar();
}
Я могу придумать некоторые причины для и против.
Для:
- Шортер.
- Все делается в состоянии.
- Не забудьте переписать условие перед циклом и в конце цикла.
Против:
- Смешение.
- Уступка в цикле (запутанная? Беспорядочная?).
- Потенциально неинициализированная переменная в состоянии цикла (она назначается , но это может быть не сразу очевидным).
- Сравнение и назначение сохраняются аккуратно разделенными, сохраняя менталитет «одна линия, одна задача» во втором формате.
- Для каждого задания будет одно сравнение, поэтому сложность в обоих случаях будет одинаковой, поэтому предпочтительнее понимать форму .
Существуют ли другие примеры использования подобной структуры?
У меня такое ощущение, что этот вопрос вызовет мнения, поэтому я бы попросил, чтобы они были подкреплены какой-то причиной. Беглый поиск не выявил дубликатов этого вопроса, поэтому я надеюсь, что это не дубликат!
Я думаю, что лучший способ был бы для: (ch = getchar(); ch! = EOF; ch = getchar()) ' – Nishant
Я бы использовал для (ch = getchar(); ch! = EOF; ch = getchar()) вместо второго варианта EDIT: ^^ Взял слова из уст –
Причина, по которой ваша альтернативная форма не используется, связана с принципом [DRY] (https://en.wikipedia.org/ вики/Don% 27t_repeat_yourself). Это также относится к решению 'for' loop, которое, кажется, сегодня популярно. – user3386109