Линия
int ifPrime=1;
должна быть внутри внешней петли for
.Там он будет инициализирован для каждого i
.Это соответствует словам на естественном языке «чтобы проверить, является ли число i простым, сначала предположим, что оно есть. Затем проверьте, делится ли оно».Код, который вы использовали ранее, сказал «чтобы проверить, просты ли числа от 2 до 1000, сначала предположите, что они есть», и эта формулировка была слишком широкой.
Код должен быть:
int main()
{
for (int i = 2; i < 1000; i++)
{
int ifPrime = 1;
for (int j = 2; j < i; j++)
Я заменил main
на int main
, так как это требуется с 20 лет.(Вы не должны изучать программирование из таких старых книг.)
Я переместил int i
и int j
в циклы for
, чтобы вы не могли случайно использовать эти переменные вне области, в которой они определенызначения.
Чтобы избежать этой ошибки в будущем, неплохо бы извлечь вычисление is_prime
в отдельную функцию.Тогда вы были бы вынуждены инициализировать ifPrime
в правильном месте.
Еще один способ найти причину этой ошибки - пройтись по коду с помощью отладчика и спрашивать себя на каждом шагу: делает ли он это?все еще имеет смысл, что делает программа?