何时将语句括在while循环中的大括号内?

时间:2018-02-15 05:03:11

标签: c while-loop

在将华氏温度转换为Celcius的程序中

#include <stdio.h>
/* print Fahrenheit-Celsius table
for fahr = 0, 20, ..., 300 */
main()
{
  int fahr, celsius;
  int lower, upper, step;
  lower = 0; /* lower limit of temperature scale */
  upper = 300; /* upper limit */
  step = 20; /* step size */
  fahr = lower;
  while (fahr <= upper) {
    celsius = 5 * (fahr-32) / 9;
    printf("%d\t%d\n", fahr, celsius);
    fahr = fahr + step;
  }
}

我们将括号中的三个语句括在括号中......但是 在程序中计算字符 -

#include <stdio.h>

/* count characters in input*/
main()
{
  long nc;
  nc = 0;
  while (getchar() != EOF)
    ++nc;
  printf("%ld\n", nc);
}

我们不会在Braces中的while循环中包含这两个语句... 为什么这样?

5 个答案:

答案 0 :(得分:1)

C允许在没有括号的情况下编写单个语句:

for (;;)
    statment;

if ()
    statment;
else
    statment;
// do, while etc...

然而,这是不好的做法 - 因为你可以看到 - 这可能会引起混淆

for (;;)
    count++;
    printf("%d", count);

特别是当代码缩进时,似乎printf语句将在每次循环迭代时执行,它不会被激活。你应该总是使用括号来避免这种混淆。

从实验中 - 当忽略这样做时,您生成的代码可能看起来更干净但从长远来看可能很难调试错误并可能导致忽略简单的错误

答案 1 :(得分:0)

您的第二个代码段相当于以下内容:

AddEnvironmentVariables()

而不是:

#include <stdio.h>
/* count characters in input*/
main()
{
  long nc;
  nc = 0;
  while (getchar() != EOF)
  {
    ++nc;
  }
  printf("%ld\n", nc);
}

如您所见,只考虑第一行(#include <stdio.h> /* count characters in input*/ main() { long nc; nc = 0; while (getchar() != EOF) { ++nc; printf("%ld\n", nc); } } )。为了避免混淆,我总是在if语句和循环中包含括号。

答案 2 :(得分:0)

while循环的语法(形式上是一种迭代语句)是

  

while(表达式)语句

请注意,语句是单数 - 只允许一个语句:

while (getchar() != EOF)
  ++nc;

但是通过在{}中包含多个语句,您可以创建一个复合语句,它可以打包多个语句,但在语法上仍然被视为语句

while (getchar() != EOF)
{
   ++nc;
   printf("%ld\n", nc);
}

因此,您使用括号{}来捆绑应被视为一个单元的代码和声明。当代码只是一个语句时,您不必这样做(但仍然允许)。

答案 3 :(得分:0)

这是因为在计算字符时,你只想为1个语句执行循环。

但是在温度转换程序中,我们必须在循环内执行3个语句,因此我们需要大括号。

#include<stdio.h>

int main()
{
  int i,sum=0;
  for(i=1;i<=10;i++)
  {  
    sum+=i;              //Loop will be only executed on this statement
    printf("Hello\n");  //Loop will also be executed on this statement
  } 
}

如果在任何循环中我们不使用花括号,则表示仅在下一个语句中需要循环。

#include<stdio.h>

int main()
{
  int i,sum=0;
  for(i=1;i<=10;i++)
    sum+=i;            //Loop will be only executed on this statement
  printf("Hello\n");
}

我希望现在区别很明显。 对于任何带有大括号的语句,例如&#34; if&#34;,&#34; else&#34;等等,情况也是如此。

答案 4 :(得分:0)

while-Loop语法:

while (expression) {
     //statement 1
     //statement 2
}

如果我们只在循环中执行单个语句(即在我们的情况下是while循环),那么我们可以写:

表单1:

while (expression) {
         //statement 1 
    }

或者我们可以将其写成:

表格2:

while (expression) 
         //statement 1
  

注意:如果我们在声明1下面再写一个声明(在表格2中)   那么它不会在循环体内执行。