'for'循环后分号的影响

时间:2012-11-16 17:22:07

标签: c loops for-loop

假设我想使用for循环在C中打印五次消息。为什么如果我在for循环之后添加一个分号,如下所示:

for (i=0;i<5;i++);

邮件没有被打印5次,但是如果我不把分号放在那里呢?

6 个答案:

答案 0 :(得分:23)

分号是一种称为空语句 * 的合法语句,表示“不执行任何操作”。由于for循环执行单个操作(可能是{}中包含的块),因此分号被视为循环体,导致您观察到的行为。

以下代码

 for (i=0;i<5;i++);
 {
     printf("hello\n");
 }

解释如下:

  • 重复五次for (i=0;i<5;i++)
  • ......什么都不做(分号)
  • 为局部变量{
  • 打开一个新范围
  • ...打印“你好”
  • 关闭范围}

如您所见,重复的操作是;,而不是printf

<小时/> * 参见K&R,第1.5.2节

答案 1 :(得分:8)

for (i=0;i<5;i++);

相当于

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

答案 2 :(得分:3)

仅包含;标记的语句称为 null语句,它只是......没有。

例如,这是有效的:

void foo(void)
{
     ;
     ;
     ;
} 

它可以在任何可以使用语句的地方使用,例如:

if (bla)
    ;
else
    ;

参见C标准段落:

  

(C99,6.8.3p3)“空语句(仅由分号组成)不执行任何操作。”

答案 3 :(得分:1)

以下代码将打印“Hello”5次..

    for(i=0;i<5,printf("Hello\n");i++);

答案 4 :(得分:0)

许多编译器在for循环后添加分号时会显示语法错误但是根据gcc编译器(Linux)或Dev-cpp,你可以在for循环后加一个分号,它不会显示任何错误。

例如

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

for(int i=0;i<=5;i++) 
{//blank body}

从上面的例子可以清楚地看出,在for循环之后我们是否输入了空白括号或分号,这意味着我们还没有输入任何变量。

现在回答你的问题 如果要打印hello五次,则必须将程序编写为

for(int i=0;i<5;i++)
{
    printf("hello");
}

我希望你理解 欢呼!
Rahul Vashisth

答案 5 :(得分:0)

#include <stdio.h>
    
int main() {
    int sum = 0; // variable initialization  
    int k = 1;  
    //for(int i = 1; i <= 10; i++);
    {
        sum = sum + k;  
        k++;
    }  
    printf("The  value of sum is %d", sum);  
    return 0;
}

如果 for 循环后有分号,则花括号中的代码被视为常规体,将正常执行。

在上面的程序中,我已经注释了 for 循环,它的作用与将 ; 放在 for 循环的末尾相同。它将总和打印为 1,因为花括号内的代码执行一次。