Как уже отмечали другие, проблема в том, что поток управления не делает то, что вы думаете, он делает.Это обычная проблема для начинающих.
Я предлагаю вам узнать, как использовать ваш отладчик .У начинающих часто возникает странная идея, что им не разрешают использовать инструменты для решения своих проблем с кодированием;скорее, они должны выяснить дефект в программе, просто прочитав его.Как только программы становятся длиннее страницы, это становится невозможным для людей.Отладчик - ваш лучший друг, так что узнайте его особенности очень хорошо .
В этом случае, если вы пройдете по коду в отладчике, вы увидите, что условие цикла вычисляется, а затем цикл пропускается.В этот момент вы не спросите «почему это возвращает ноль?», Вы спросите «почему тело цикла всегда пропускается?»Ясно, что это гораздо более продуктивный вопрос, потому что здесь на самом деле проблема.
Не пишите любой код, не проходя через него в отладчике.Посмотрите на каждую переменную, посмотрите, как она меняет значение (кстати, отладчик выделяет переменные в окнах наблюдения сразу после того, как они меняют значение) и убедитесь, что поток управления и переменные точно соответствуют ожидаемым.Обратите внимание на тихие сомнения;если что-то кажется необычным, отследите это и либо узнайте, почему это правильно, либо исправьте, пока оно не будет.
Относительно реальной проблемы: запомните, 30, 45, 60 ... все кратны и три и пять, но вы хотите добавить их к сумме только один раз.Мой совет при решении задач Project Euler заключается в написании кода, похожего на то, что вы пытаетесь решить, насколько это возможно.Попробуйте сначала написать проблему в «псевдокоде».Я бы псевдокод это:
sum = 0
for each positive number under 1000:
if number is multiple of three or five then:
add number to sum
Как только у вас есть этот псевдокод, вы можете заметить его тонкости.Мол, - это 1000 включенных ?Проблема говорит "под 1000" или "до 1000"?Убедитесь, что ваше условие цикла учитывает это.И т. Д.
Чем ближе программа читает, как будто проблема действительно решается, тем больше вероятность, что она будет правильной.