关于#for#的问题,如何解决?


#include <iostream>

using namespace std;

int main()
{
    int i = 0;                                         //定义i值,并初始化为0
    cin >> i;                                         //输入i值
    cout << "\n" << endl;                     //换行
    for (i >= 0; i--;)                               //执行for循环
        cout << i << endl;
    return 0;
}

学for循环时尝试去掉初始化语句,因为在函数体开头就初始化了i值

问题一:如果按照for循环结构来说,“i >= 0”不是应该只执行一次吗?
但是在第一个循环过后就只执行i--,理论上我认为应该是无限打印--i的,但是打印到0就停止了
问题二:for (i--; ;i >= 0) ,这个语句却是无限打印--i,就无法理解了,还是必须严格按照表达式顺序?

改为 for(;i>=0;i--)
问题一:如果按照for循环结构来说,“i >= 0”不是应该只执行一次吗?
但是在第一个循环过后就只执行i--,理论上我认为应该是无限打印--i的,但是打印到0就停止了
----你说的没错,如果输入i为10的话,输出的是9到0
问题二:for (i--; ;i >= 0) ,这个语句却是无限打印--i,就无法理解了,还是必须严格按照表达式顺序?
--这个循环不行,首先没有结束条件,会是死循环;其次i>=0只是个逻辑判断,对循环毫无影响。
======
for循环第一项是初始值,一次性的;第二项是结束条件,为真则结束循环,每次循环都判断;第三项是变化项,每次循环结束后会执行

for(a;b;c)
三个表达式
a只初始化执行一次
b在每次循环之前执行,并且b的值为真才继续循环,为假退出循环
c在每次循环之后执行
a,b,c是按位置传入的
并不因为你把i>0写进第一个位置,第一个位置就变成b了,第一个位置永远是a
--=-=-=
你这两个问题其实是一个问题,你以为把i++换个地方其实也一样,但是编译器可不管你往a,b,c里各填了什么,它就是简单的把i++赋给a或b
并不是只要出现了大于号就是作为条件,只要出现了++就是作为c项