int x;
printf("enter number >");
scanf("%d",&x);
for(int i=1;i<=x;i++)
{
i=i+1;
printf("%d ",i);
}
Разве это не работает так на языке C? для х=5
i=1 2=1+1
i=2 3=2+1
i=3 4=3+1
i=4 5=4+1
i=5 6=5+1
вывод должен быть 2 3 4 5 6 тогда но на выходе 2 4 6 почему?
нет, я знаю, что i++ и i=i+1 одинаковы, моя проблема в том, есть ли ошибка в выводе, когда я сам вычисляю, я нахожу вывод 2 3 4 5 6, но он показывает 2 4 6 в программе.
Вы дважды увеличиваете свой счетчик в каждом цикле, один раз с помощью i=i+1
внутри цикла и один раз с i++
в инструкции for
, поэтому значение i
будет повторяться только для четных чисел.
i++ увеличивает переменную i, чтобы исправить ваш код
int x;
printf("enter number >");
scanf("%d",&x);
for(int i=1;i<=x;)
{
i++;
printf("%d ",i);
}
for(int i=1;i<=x;i++)
{
i=i+1; /* This statement increments i, now i = 2 */
printf("%d ",i); /* This, then prints 2.
}
Затем третья часть цикла for
снова увеличивает i
.
На второй итерации
i = i + 1
увеличивает i
до 4
.... и так далее.
Удалите это утверждение из своего кода:
i = i + 1;
И тогда он должен работать, как ожидалось.
Вы увеличиваете значение «i» два раза за итерацию:
Итак, если x=5, вот что происходит:
первая итерация:
i = 1
Цикл входит в свое тело, где: я = я + 1 = 1+1 = 2
printf печатает текущее значение «i», равное 2, а затем цикл переходит к шагу увеличения:
i++;
там вы дополнительно увеличиваете значение «i» с +1 (через постфиксный оператор ++ для увеличения), поэтому:
i++ = i+1 = 2+1 = 3
i = 3;
Затем цикл возвращается к проверке условия, чтобы убедиться, что 'i' по-прежнему <= 5. 3<=5 = true, поэтому цикл выполнит свой блок кода еще раз:
второе взаимодействие:
i = 3;
Цикл входит в свое тело, где:
i = i + 1 = 3+1 = 4
printf печатает текущее значение «i», равное 4, а затем цикл переходит к шагу увеличения:
i++ = i+1 = 4+1 = 5
i = 5;
Затем цикл возвращается к проверке условия, чтобы убедиться, что i все еще <= 5. 5<=5 = true, поэтому цикл выполнит свой блок кода еще раз:
Третье взаимодействие:
i = 5;
Цикл входит в свое тело, где:
i = i + 1 = 5+1 = 6
printf печатает текущее значение «i», равное 6, а затем цикл переходит к шагу увеличения:
i++ = i+1 = 6+1 = 7
i = 7;
Затем цикл возвращается к проверке условия, чтобы убедиться, что 'i' по-прежнему <= 5. 7<=5 = false, поэтому цикл завершит свое выполнение, и программа продолжит выполнение следующих инструкций.
вы забыли часть
i++
в цикле for?