первый ответ неверный
Класс! Обратите внимание, что в строке №3 можно было написать и int a = -32768; - разницы никакой.
Сейчас нам ТС объяснит, что это баг ардуины.
P.S. Не забывайте вставлять код нормально.
Почему? Проверьте ![]()
Ёкарный бабай, значит все (от слова ВСЕ) серверы любого типа ошибочны и недопустимы? Надо будет сказать мужикам, а то они и не в курсе.
потому что значение 32768 лежит за пределами типа int, и, следовательно, использование этого кода может повлечь ровно те же проблемы, что в начальном вопросе ТС.
Нет, разница принципиальна. Это правильный ответ.
Может, тут Вы правы. Но в конкретной среде ведёт себя также.
Евгений, Вы ведете себя непедагогично
Двести сообщений убито на то, чтобы обьяснить одному студенту почему не надо использовать 32768 в типе инт - и тут же принимаете от другого такой ответ как правильный ![]()
так задача же неправильная. Отсюда и ответы такие.
Хотя, конечны, Вы правы, но тема-то уже давно превратилась в чисто поприкалываться ![]()
Видимо, в 17-й строке вы видите женщину в красном, и очень этим гордитесь. А я лично вижу там страшного уродца, потому что даже while(True){} выглядит красивее, чем эта попытка использовать for без параметров. Видимо, кто-то хотел похвастаться перед всем миром своим знанием правила “краткость - сестра таланта”. Так-то оно так, конечно, но только талант заключается в том, чтобы сказать кратко, не искажая смысл излагаемого.
Кстати, @anonimSimen , а почему там for (;;), а не while(1) ? Есть какая-то принципиальная разница?
Мне кажется, что хоть
do {
} while (1);
один хрен
Sorry, but
while (true){}
Только не компилируется.
Есть такой Первый закон Скотта: «Неважно, что неправильно. Возможно, это хорошо выглядит…»
К сожалению больше года пенсионер уже. Ответ не мой, а wokwi. Я сначала -32768 поставил, а потом думаю дай проверю на слабо. И не ошибся - эмулятор его преодолел ![]()
Мне его вариант понятен.
Согласен - для ничего от ничего до ничего с шагом в ничего… делай…
Вы упрощаете этот оператор до искажения его сути. Нет там никаких “для” и “шагов”. С таким походом Вы сильно ограничиваете его применимость.
Правильное понимание этого оператора таково:
for (op1; op2; op3) op4;
op5 .....
эквивалентно:
- Выполнить op1;
- Выполнить op2;
- ЕСЛИ результат п.2 равен 0, то перейти к п.7
- Выполнить op4;
- Выполнить op3;
- Перейти к п.2
- Выполнить op5 …
Любую из операций можно опустить, тогда её результат считается единицей.
никаких “шагов” и вообще ничего. Операции ор1-ор5 могут быть абсолютно любыми. Единственное требование - результат операции op2 должен позволять преобразование к типу int.
Например, адруино-приложение можно записать так:
for (setup() ;; loop());
Это совершенно корректно и никаких “шагов”.
Ну я этого не знаю, ориентируюсь на
for (initialization; condition; increment) {операторы выполняющиеся в цикле}
Этот исходник надо осмыслить прежде чем понять есть ли ещё полезный вариант подобный справочному.
Это сильное упрощение.
Нинаю. Мошт, Петрович обьяснит.
Удивился, действительно в стандарте языка так описывается for ?
Посмотрел - нет не так. И “правильное понимание” не совпадает со стандартом.
C11 6.8.5.3 The for statement
6.8.5.3 The for statement
1 The statement
for ( clause-1 ; expression-2 ; expression-3 ) statement
behaves as follows: The expression expression-2 is the controlling expression that is
evaluated before each execution of the loop body. The expression expression-3 is
evaluated as a void expression after each execution of the loop body. If clause-1 is a
declaration, the scope of any identifiers it declares is the remainder of the declaration and
the entire loop, including the other two expressions; it is reached in the order of execution
before the first evaluation of the controlling expression. If clause-1 is an expression, it is
evaluated as a void expression before the first evaluation of the controlling expression.158)
2 Both clause-1 and expression-3 can be omitted. An omitted expression-2 is replaced by a
nonzero constant.