В этой задаче, которая является легкой и простой, я делаю сумму и произведение. Я хотел сделать с инструкцией "для", чтобы понять, как эта штука работает.
#include < iostream >
using namespace std;
int main()
{
int n,i,s=0,p=1;
cin>>n;
for (i=1;i<=n;i++)
s=s+i;
p=p*i;
cout<<s<<" "<<p;
}
Я не могу объяснить, почему результат "6" для суммы и "4" для продукта...
Может кто-нибудь объяснить мне, почему код показывает это? Если я помещу инструкции из структуры «для» между фигурными скобками, он покажет «6» для суммы и «6» для продукта.
пошаговое выполнение кода с помощью отладчика было бы полезно
Еще одна вещь, которая была бы полезна, — это указание фактических входных данных, вводимых в программу.
Если вы не заключаете код в скобки, то компилятор выполнит только первую строку, а вторая будет вне области цикла for.
Отступ в c++ не делает код частью одного блока. Вам нужно сообщить компилятору с помощью { и }
Включите предупреждения компилятора. GCC, например, имеет очень хорошее предупреждение о том, что «отступы вводят в заблуждение», когда вы забываете о квадратных скобках.
Хорошо, но почему в продукте результат "4", если n=3?
Петля останется, когда i == 4. Поскольку p=p*i; находится вне цикла, а p было инициализировано с помощью 1, новым значением будет p = 1 * 4. Вам действительно следует научиться пользоваться отладчиком. Это один из самых важных инструментов для разработчиков.





Во-первых, это не < iostream >, это <iostream>. Пробелы там не допускаются. Во-вторых, несмотря на отступ, p=p*i; находится вне цикла for. Включить предупреждения компилятора:
prog.cc:7:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
7 | for (i=1;i<=n;i++)
| ^~~
prog.cc:9:10: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
9 | p=p*i;
| ^
Используйте {}, чтобы исправить это:
for (i=1;i<=n;i++)
{
s=s+i;
p=p*i;
}
Вы понимаете, что
p=p*i;находится вне цикла?