为什么“for(; i< = 10; i ++)”工作但“for(i = 0; i< = 10 ;;)”不?

时间:2014-07-21 14:41:46

标签: c for-loop expression

为什么第一个程序不起作用,但第二个程序不起作用?我的意思是,第二个程序给出错误

  

"在';'"

之前的预期表达

但是为什么它不会为"(?i< = 10; i ++)" 提供相同的内容,因为第一个表达式也缺失了?不是&#34 ;;;" " for(i = 0; i< = 10 ;;)" 第二个程序表示空白表达?最后,为什么" for(i = 0; i< = 10;)" 在删除第二个分号后才能工作?

//Program 1
#include<stdio.h>

int main()
{
int i=1;
for(;i<=10;i++)
{
printf("%d\n",i);
}
}

//Program 2
#include<stdio.h>

int main()
{
int i;
//for(i=1;i<=10;) // This works but following doesn't
for(i=1;i<=10;;) 
{
printf("%d\n",i);
i++;
}
}

5 个答案:

答案 0 :(得分:12)

for(i=1;i<=10;;)不是有效的C语法。 C中的for循环语法是

for ( expressionopt ; expressionopt ; expressionopt ) statement
for ( declaration expressionopt ; expressionopt ) statement  

请注意,即使我们省略了某些表达式,也必须始终存在两个分号。

答案 1 :(得分:4)

for语句循环由以分号分隔的三个子句组成。因此它应该只有两个半冒号,第三个导致语法错误。这三个部分具有以下含义:

  • 变量初始化 - 在第一次迭代之前仅执行一次
  • 循环的条件 - 在每次迭代之前执行以验证循环是否应该中断其执行
  • 步骤 - 在每次迭代后检查条件之前执行

这些步骤中的每一步都可能为空,但即使正好两个分号也应该将这些部分分开。

答案 2 :(得分:2)

&#34; for&#34;结构设置为有3个部分: - 实例化迭代的变量,迭代的时间,以及更新变量(增量,减量或其他)。

for(int i=0; i<10; i++)

所以当你有下面的循环时,你有4个部分,这对于&#34; for&#34;循环。(部分由半冒号分隔。)另一个错误但语法正确,因为它有3个部分。

for(i=1;i<=10;;) 

答案 3 :(得分:1)

For循环包含三个条件

  
      
  • 初始化,
  •   
  • 迭代条件,
  •   
  • 增量。
  •   

第一个条件也可以在循环之前声明,如

Int i=0;                       
for(;i<10;i++)
{             
}                 

增量也可以在循环中声明

for(i=0;i<10;)              
{                 
      i++;             
}                           

迭代的条件应该在循环中确定 但是你的循环包含语法,好像有四个条件(3个分号)。所以它不被C编译器识别。如果你删除额外的分号,它将起作用。

答案 4 :(得分:0)

这只是一个语法错误。

正确的C语法是:

 for( exp11, .., exp1N; exp21, .., exp2N ; exp31, .., exp3N) { }