- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
for (int i = 1; i++; i <= 20) {
if (ExecSQL(...) >= 0) {
Ok_rekord=true;
break;
}
if (i == 20) {
if (ExecSQL(...) < 0) {
// показываем сообщение об ошибке
} else {
Ok_rekord=true;
}
}
}
wvxvw 20.05.2013 19:04 # +3
bormand 20.05.2013 19:07 # +2
P.S. Кто-то уже минусов понаставил, не осилив цикл, и подумав что тут все ок ;)
neeedle 21.05.2013 09:54 # 0
defecate-plusplus 21.05.2013 10:17 # 0
neeedle 21.05.2013 10:23 # 0
defecate-plusplus 21.05.2013 10:35 # +1
neeedle 21.05.2013 11:39 # 0
absolut 21.05.2013 10:55 # +2
Вообще-то исходный "цыкол" не закончится при i==20. Если опираться на i, то он закончится когда i переполнится, а потом прибежит в ноль через отрицательные значения.
P.S. при это я нихуя не понял почему так: https://ideone.com/wngs0w
neeedle 21.05.2013 11:44 # +2
В нормальном цикле сначала идет условие, а потом действие, если это условие еще действительно. Но тут, мы бесконечно инкрементим переменную i.
defecate-plusplus 21.05.2013 11:46 # +1
char вместо того, чтобы перевалить 127 > -128 .. > 0, или на крайняк 255 > 0, херачит дальше, как будто он int
беда ideone в том, что неизвестно на каких ключах это компилилось, а сидеть подбирать (наверняка в гцц есть флаг считать char интом) мне пока лень
neeedle 21.05.2013 11:51 # −1
absolut 21.05.2013 12:02 # +1
neeedle 21.05.2013 12:04 # −5
TarasB 22.05.2013 15:07 # +1
x = y*y
Чему равно игрек? Конечно же, 4, ведь я же игрек возвёл в квадрат!
neeedle 22.05.2013 15:42 # −1
Следуя вашей логике могу написать i++ и ткнуть вас носом в увеличение игрека.
Но вы правы, это не из-за операции, а косяк компилятора. В VS все нормально.
TarasB 22.05.2013 15:53 # 0
cout<<y*y
Чему равно игрек? Конечно же, 4, ведь я же игрек возвёл в квадрат!
И ещё я явно не присваивал значение операции!
neeedle 22.05.2013 15:59 # 0
cout<<y++
Чему равно игрек? Конечно же, 2, ведь я же игреку не присвоил значение!
Различные операции, че пристал ко мне. Ну ошибся человек и?
TarasB 22.05.2013 16:16 # 0
Нихуя, тут ты использовал игрек как левалуй.
> Ну ошибся человек и?
Мне показалось, ты не понимаешь основы.
neeedle 22.05.2013 16:22 # 0
Просто потому, что ты об этом уже знаешь. Знаешь, как сработает компилятор в данном случае.
Логично предположить, что и в предыдущем случае компилятор сработает как надо, но он не сработал как надо, поэтому я просто сделал предположение, почему компилятор сработал именно так. По моему, все симптомы говорят о том, что i скастонулся в int.
TarasB 22.05.2013 16:45 # 0
не нихера не защитываю, ты говорил об этом не как о предполагаемой причине бага, а как о "ничего удивительного"
neeedle 22.05.2013 16:55 # 0
Но позже признал ошибку:
[color=blue]Но вы правы, это не из-за операции, а косяк компилятора. В VS все нормально.[color]
neeedle 22.05.2013 16:56 # 0
defecate-plusplus 22.05.2013 16:59 # 0
neeedle 22.05.2013 17:04 # 0
Я там другую ошибку исправлял и не заметил как допустил эту. :)
А редактировать можно только раз. В общем внимательность после работы на минимуме.
defecate-plusplus 22.05.2013 17:07 # +4
f5 в помощь
neeedle 22.05.2013 17:17 # −1
Имеете ввиду возможность отменить изменения внесенные в поле? Я имел ввиду возможность второго редактирования после коммита первого изменения.
absolut 22.05.2013 17:31 # +4
редактировать комментарий можно в течение минут 5 по факту (а не 1 раз).
Если время еще не вышло, а возможности редактирования как бы нет, обновите страницу и она появится. Это такая фича ГК :)
neeedle 22.05.2013 17:49 # 0
absolut 21.05.2013 11:59 # 0
>беда ideone в том,
так liveworkspace "under maintenance" :(
absolut 21.05.2013 12:05 # 0
defecate-plusplus 21.05.2013 12:08 # 0
шланг нормально разобрался с таким циклом
ну и, понятное дело, студия тоже ок
http://goo.gl/RBEMO
absolut 21.05.2013 12:18 # 0
defecate-plusplus 21.05.2013 12:47 # +1
сравни цикл от шланга (testb %bl, %bl) и бесконечный цикл от гцц
defecate-plusplus 21.05.2013 12:56 # +1
гцц 4.8 уже разбирается с проблемой
гцц 4.7:
гцц 4.8:
absolut 21.05.2013 13:16 # 0
absolut 21.05.2013 13:29 # 0
defecate-plusplus 21.05.2013 13:43 # 0
-S вроде флаг
absolut 21.05.2013 14:42 # 0
TarasB 22.05.2013 15:04 # 0
TarasB 22.05.2013 15:02 # 0
Ну и цикл да, такой цикл. Сишкоблядская форма for всё-таки дерьмо, что ни говори. 99% случаев в ней используется ++ или -- между двумя значениями, но ради "универсальности", нужной в 1% случаев, сделали неудобную хуйню, в которой можно вот так вот лажануться.
bormand 22.05.2013 15:26 # +1
3.14159265 22.05.2013 15:42 # 0
На эти бряки столько бумаги и чернил перевели, столько байт лишних истратили, столько студентов проклинали сей switch.
И сука ни один SISHKOBLYADO-based-language не отошел от этой пагубной практики
absolut 22.05.2013 17:12 # 0
С#
3.14159265 22.05.2013 17:25 # 0
http://msdn.microsoft.com/en-us/library/06tc147t(v=vs.80).aspx
absolut 22.05.2013 17:32 # 0
3.14159265 22.05.2013 17:43 # +2
ИМХО еще большее уродство сделали.
TarasB 26.05.2013 19:11 # 0
defecate-plusplus 22.05.2013 15:44 # +1
и потом еще не заметить ворнинг "результат выражения не используется"
по мне так лучше универсальный for, работающий с любыми типами, умеющий в несколько условий завершения цикла и несколько действий при итерации, с шагом нужной длины, а не только 1
и да, объявляющий локальный счетчик прямо в себе, а не в отдельном разделе несколькими пейджапами выше
TarasB 22.05.2013 15:51 # 0
и да, объявляющий локальный счетчик прямо в себе, а не в отдельном разделе несколькими пейджапами выше
"по мне лучше универсальный гото который многа многа букав"...
Про счётчик не понял
Во-первых, вопрос расположения объявления счётчика перпендикулярен вопросу хуёвочитаемого и труднонаписуемого заголовка, и да, я в двойном цикле несколько раз лажался в
for (int i=0; i<20; ++i) for (int j=0; i<10; ++i)
безо всяких нахуй предупреждений от компилятора. Почему я так лажался? Ну так пальцы затачиваются под конкретный сочетания символов.
Вот даже сейчас я спутал падеж у прилагательного, по той же причина.
*причине
Во-вторых, в Аде счётчик объявляется на месте, тип не указывается.
roman-kashitsyn 22.05.2013 15:56 # +1
defecate-plusplus 22.05.2013 16:05 # 0
будет навроде черт, когда же LWS починят уже!
3.14159265 22.05.2013 16:17 # +1
Мы тебе верим!
Был тут эпичный тред, начавшийся поломанными генераторами в хацкиле а закончившийся отсосом практически всех языков, допускающих floatы в диапазонах.
absolut 22.05.2013 17:13 # 0
defecate-plusplus 22.05.2013 16:03 # +1
for (int i = 0; i > 10 && (some % 3) == 0; some = get_next_random(some), i += 2)
на паскале тебе придется для этого писать while, что, внезапно, не очень удобно (перенос инкрементов в хвост), особенно, когда наступит нужда использовать continue - вместо continue понадобится чуть ли не goto на строчки с инкрементами
вот так вот универсальный for работает, как ему и положено
ну а теперь есть еще и for (auto i: where), что тоже неплохо
TarasB 22.05.2013 16:14 # 0
Я об этом и сказал, как в 1%.
Хотя не, нихуя, я в таких случаях дополнительные условия проверяю внутри с оператором break. У меня быдлизьм?
> произвольный шаг
А вот это в натуре 1%. Серьёзно.
defecate-plusplus 22.05.2013 16:21 # +1
только в лабах это 100%, в продакшене это обычно итерация по контейнерам (да, там шаг ++iterator, кстати, умеет ли в это делфи?) или еще что-то более мутное навроде целочисленные с произвольным шагом - разные блочные алгоритмы, типа шифрования/дешифрования
TarasB 22.05.2013 16:49 # 0
Итерация по контейнерам - это то же самое
for (smth = start; smth<end; ++smth) операторы < и ++ перегружены
for (smth in [start..end])... удобнее же
Язык должен поддерживать эту фичу для любых объектов, допускающих эти операции.
> целочисленные с произвольным шагом - разные блочные алгоритмы, типа шифрования/дешифрования
Шаг одинаковый весь цикл? Часто я снаружи оставляю i, внутри использую i*2, как-то так.