Интересное оповещение об опечатках!
Вряд ли вы будете делать то, что, как вы думаете, он делает ...
for (i>0; i--;){
Хотя это совершенно допустимый синтаксис и будет зацикливать правильный номерраз значение i
внутри цикла (вероятно) будет на единицу меньше, чем вы предполагали ...
% cat 4237157.c++
#include <iostream>
int main()
{
{
std::cout << "Your loop: " << std::endl;
int i = 10;
for (i>0; i--;)
{
std::cout << i << std::endl;
}
}
{
std::cout << "More conventionally: " << std::endl;
for (int i = 10; i > 0; i--)
{
std::cout << i << std::endl;
}
}
return EXIT_SUCCESS;
}
% g++ -o 4237157{,.c++}
% ./4237157
Your loop:
9
8
7
6
5
4
3
2
1
0
More conventionally:
10
9
8
7
6
5
4
3
2
1
Синтаксис for
-петля в C-подобных языкахis:
for (variable initialization; conditional; variable increment)
Вы оцениваете "i>0
" вместо какой-либо инициализации.Это также может быть пустым.Затем вы оцениваете, равен ли i--
ноль.Поскольку i
является пост-декрементированным, ваш цикл начинается с i
, что на единицу меньше, чем было инициализировано до цикла, выполняется до (включая) значения, равного нулю, и , тогда завершается.