为什么在for循环之后没有花括号

时间:2014-03-28 10:30:39

标签: c arrays for-loop

我是初学者,请告诉我为什么程序中的for循环之后没有大括号{ }。我已就此问题发表评论。

void main()
{
    int a[50],n,count_neg=0,count_pos=0,I;

    printf("Enter the size of the array\n");

    scanf("%d",&n);

    printf("Enter the elements of the array\n");

    for (I=0;I < n;I++)          /* i dont understand why no {} occuerred after this for loop please explain*/
        scanf("%d",&a[I]);

    for(I=0;I < n;I++)
    {
        if(a[I] < 0)
          count_neg++;
        else
         count_pos++;
    }

    printf("There are %d negative numbers in the array\n",count_neg);
    printf("There are %d positive numbers in the array\n",count_pos);
}

4 个答案:

答案 0 :(得分:3)

允许不为单行添加括号。但是我强烈建议这样做。这是a famous bug,这可能是不使用括号的结果。

例如,如果你写

if(test)
   foo();

以后需要第二个函数调用你可能会犯错误的写作

if(test)
   foo();
   bar();

你想要的东西。

如果您从头开始使用括号并写

if(test) {
   foo();
}

你没有这个问题:

if(test) {
   foo();
   bar();
}

答案 1 :(得分:1)

如果只有一个语句需要循环,即如果循环体只是一个语句,则可以省略大括号{ }。这是递归的,例如

for(i = 0; i < n; ++i)
   for(j = 0; j < m; ++j)
      for(k = 0; k < l; ++k)
        process(v[i][j][k]);

相同
for(i = 0; i < n; ++i)
{
   for(j = 0; j < m; ++j)
   {
      for(k = 0; k < l; ++k)
      {
        process(v[i][j][k]);
      }
   }
}

答案 2 :(得分:1)

如果您的代码由一行组成,则可以不带括号编写。

这不仅适用于循环,它也适用于if if elseelse等条件子句

例如:

if(a == b){
    a++;
}

相同
if(a == b)
    a++;

答案 3 :(得分:-2)

您好,欢迎来到StackOverflow! :)

我一般不理解你的问题,但我仍然会告诉你以下内容: 在编程中,开始和结束括号{}用于标识代码块,该代码块将从左括号 {不间断直到结束括号} 执行。代码块用于将一段代码与另一段代码隔离开来。

示例1:

void Function1()
{

  void Function2()
  {
    // Calculate
    // Long Stuff
    // Complicated
    // Atom Bombs exploding

  } // Close Function2

  void Function3()
  {
    // Do 
    // Some
    // Other
    // Evil
    // Stuff

  } // Close Function3

}// Close Function1

void Function3()
{

  InnerFunction(); // This will execute Function3, but without going to Function3,  
                   // because the code of Function2 is ISOLATED with {} from the code of Function3

}// Close Function2