“for”和“while”在括号之间或之间有什么区别?

时间:2015-01-30 01:22:42

标签: c

正如标题所说,我已经编写了一些代码并对其进行了测试但由于某种原因我仍然无法理解它。

for (…)
  {
    …
  }

for (…)
  …

while (…)
  {
    …
  }

while (…)
  …

此外,我已经看到在某些情况下main在没有int的情况下工作,为什么会发生这种情况?而且,如何正确地写main

对不起双重问题,我有很多疑问(特别是阵列)。 谢谢,抱歉。

4 个答案:

答案 0 :(得分:5)

如果省略花括号,循环的主体只是一个语句。大括号允许您在正文中放置多个语句。

使用大括号:

while (...) {
    statement1;
    statement2;
    statement3;
}

所有3个陈述都将重复执行。

没有大括号:

while (...) 
    statement1;
statement2;
statement3;

仅重复执行statement1。其他两个语句将在循环结束后执行一次。

总是使用大括号是个好主意。参见

Why is it considered a bad practice to omit curly braces?

答案 1 :(得分:3)

forwhile语句(也是if`语句)的语法总是控制一个子语句。

while循环的格式为:

while ( expression ) statement

添加花括号只是意味着您正在使用不同类型的语句。 复合语句{组成,后跟零个或多个声明或语句,后跟}

请注意,大括号不是while语句的语法的一部分。

所以,如果我写:

while (foo)
    puts("hello");

while语句控制单个子语句,恰好是函数调用。如果我写:

while (foo) {
    puts("hello");
    puts("good-bye");
}

while语句仍然控制单个子语句,但这次碰巧是一个复合语句,它本身包含两个子语句。

正如其他人所指出的那样,使用复合语句的优点是,当您想要向循环体添加某些内容时,它可以帮助避免错误。看到这样的错误代码并不罕见:

while (foo)
    puts("hello");
    puts("good-bye");

这是完全合法的,大多数编制者都不会抱怨它,但第二次调用不受while控制;在while循环结束后,它将只执行一次。通过从头开始一直使用花括号,您可以避免这种特殊类型的错误。

答案 2 :(得分:1)

for / while没有{}意味着只有下一个语句将成为循环的一部分,之后的任何语句都在循环之外。这导致了许多错误,可能不是一个好的通用做法。添加{}总是一个好主意,因为如果你在循环中添加更多代码,如果忘记稍后添加{},就不会让自己头疼。

答案 3 :(得分:1)

长话短说,如果省略块C控制结构(而if,for,else ......),它们通常会迭代或执行下一个语句。这是一个坏主意。事实证明,你可以在whilefor循环中放置很多东西代替块,其中大多数也是一个坏主意。我们来看看C99标准。

6.8.5 Iteration statements Syntax
  iteration-statement:
      while ( expression ) statement
      do statement while ( expression ) ;
      for ( expressionopt ; expressionopt ; expressionopt ) statement 
      for ( declaration expressionopt ; expressionopt ) statement

请注意,他们都将“声明”视为“块”。什么是“声明”?

6.8 Statements and blocks Syntax
  statement:
      labeled-statement
      compound-statement
      expression-statement
      selection-statement
      iteration-statement
      jump-statement

长话短说,“复合语句”是一个块,“表达式语句”是单个表达式,我们现在就跳过其余部分。这是一个带有表达式语句的while循环。

while( condition )
    do_something;

这是一个带有复合语句的while循环。

while( condition ) {
    do_this;
    and_this;
    and_this;
}

总是使用块,即使是一行也是个好主意。为什么?因为你可以轻易地欺骗自己,认为你是在循环而不是你的陈述。

while( condition )
    do_this;
    and_this;
    and_this;

最后两个陈述肯定看起来像是循环的一部分,但它们不是。

一个常见的错误是写下这样的东西:

if( condition )
    do_this;
else
    do_something_else;
    and_also_this;

and_also_this将永远执行。

总是包含块更安全。

The main question has already been answered elsewhere