当增量计数器和测试计数器在for循环语法中互换时会发生什么?

时间:2015-08-01 07:18:56

标签: c for-loop

请解释为什么
案例1:

int main()
{
    int i;
    for(i=1;i++;i<100)
        printf("%d",i);
    return 0;
}

导致无限循环,而
案例2:

int main()
{
    int i;
    for(i=0;i++;i<100)
        printf("%d",i);
    return 0;
}

甚至一次都不运行循环?
请说明如何解释这种语法?

4 个答案:

答案 0 :(得分:2)

正确的语法是

for (i=1; i<100; i++) {
    something
}

实际发生了什么?
for循环有三个参数,
 1.执行循环之前的初始条件或初始化。在这种情况下,将i=1设置为i1  2.在每个循环的开头处检查的最终条件。如果不满足此条件,则循环中断。在这种情况下,它是i<100。因此,如果在下一个循环开始时,i >= 100循环被破坏  3.循环结束时的步骤或周期性操作。在这种情况下,它是i++。在每个循环结束时,我增加1。

您的代码发生了什么

for (i=1; i++; i<100)

第一部分是好的 第二个是在每个循环开始时执行的。 i++返回i的值,然后递增它。 (与++i相反,后者则相反。)因为在第一个例子中i = 1,它从1开始,第二个参数总是返回一个值>= 1,它被解释为{{1 }}。但是在你的第二个例子中,我从0开始。所以在第一次迭代中,第二个参数返回0,这被解释为false,循环永远不会开始。
第三个是在最后执行的,并且决不会以任何方式影响循环。

答案 1 :(得分:2)

C programming language中for循环的语法是:

for ( init; condition; increment )
{
   statement(s);
}
  • 以下是for循环中的控制流程:

    1. 首先执行init步骤,但只执行一次。此步骤允许您声明和初始化任何循环控制变量。只要出现分号,就不需要在此处添加声明。

    2. 接下来,评估条件。如果是,则执行循环体。如果为false,则循环体不会执行,控制流会在for循环之后跳转到下一个语句。

    3. 执行for循环体之后,控制流会跳回到increment语句。此语句允许您更新任何循环控制变量。只要在条件之后出现分号,此语句就可以留空。

    4. 现在再次评估条件。如果为真,则循环执行并且过程自身重复(循环体,然后递增步骤,然后再次调节)。条件变为false后,for循环终止。

在第一种情况下:

  • init设置i = 1
  • conditon - 此处为i = 1,其中c为true。 (后增量会增加执行判决后的值)
  • body - 执行printf("%d",i);
  • increment - i<100不影响i的值。

现在在C中,从1到无穷大的所有值,其值为true,因此执行infinetly

在第二种情况下

  • init设置i = 0
  • conditon - 此处i = 0(再次发布增量)在c中为false,因此loop退出。

因此它甚至没有执行一次。

For循环的流程图:

enter image description here

答案 2 :(得分:0)

试试这个:

var validator = $("#sjform").validate({
    rules: {
        txtname: "required"

    },
    messages: {
        txtname: "Required"
    },
    errorPlacement: function (error, element) {
    //    error.appendTo($(element).parent().next());
    error.insertAfter(element);
    },

    //highlight: function (element) {
    //    $(element).closest('.form-group').addClass('has-error');
    //},
    //unhighlight: function (element) {
    //    $(element).closest('.form-group').removeClass('has-error');
    //},
    highlight: function (element) {
        $(element).parent().removeClass('has-success').addClass('has-error');
    },
    unhighlight: function (element) {
        $(element).parent().removeClass('has-error').addClass('has-success');
    },
    errorElement: 'span',
    errorClass: 'help-block',
    submitHandler: function (form) {
        form.submit();
    }
});

答案 3 :(得分:0)

int main()
{
    int i;
    for(i=0;i++;i<100)
    printf("%d",i);
    return 0;
}

因为for循环具有语法

for(initialize variable; condition check; increment/decrement)  

您已将变量初始化为i = 0
在条件检查部分,您已经写了i++,即帖子增量,因此i保留0,这意味着FALSE,因此它将退出循环。