【问题标题】:Diffrientiation in outputs depending on the ommition of curly braces in for loops (c++) [duplicate]输出的差异取决于 for 循环中大括号的省略(c ++)[重复]
【发布时间】:2016-01-18 21:19:25
【问题描述】:

按照本网站上的参考指南的建议,我一直在阅读 c++ 入门书,我注意到作者省略了 for 循环的花括号。我检查了其他网站,通常应该放入花括号。放大括号和省略时有不同的输出。代码如下

int sum = 0;
for (int val = 1; val <= 10; ++val)
    sum += val;  
    std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;

// This pair of code prints the std::cout once
for (int val = 50; val <=100;++val)
    sum += val;
    std::cout << "Sum of 50 to 100 inclusive is " << sum << std::endl;

// -------------------------------------------------------------------------
for (int val = 1; val <= 10; ++val) {
    sum += val;  
    std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;
}

// This pair of code prints the std::cout multiple times
for (int val = 50; val <=100;++val) {
    sum += val;
    std::cout << "Sum of 50 to 100 inclusive is " << sum << std::endl;
}

如果有人能解释输出的差异,我将不胜感激。提前致谢!

【问题讨论】:

  • "... 我注意到作者省略了 for 循环的花括号。" 把那本书扔进你的垃圾箱。马上。
  • 最好的建议是始终在 for/while/if 语句中使用花括号。省略大括号是应该避免的遗留语法,IMO。另见google.com/search?q=heartbleed
  • @πάνταῥεῖ 大声笑我已经停止使用另一本书来“推广不良做法”。
  • @RyanBemrose 感谢您的建议!

标签: c++ curly-braces curly-brackets


【解决方案1】:

for语句具体定义如下

for ( for-init-statement conditionopt; expressionopt) statement
                                                      ^^^^^^^^^

语句可以是任何语句,包括复合语句

compound-statement:
    { statement-seqopt}

因此在这个 for 语句的例子中

for (int val = 1; val <= 10; ++val)
sum += val; 

声明是

sum += val; 

在这个 for 语句的例子中

for (int val = 1; val <= 10; ++val) {
sum += val;  
std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;
}

声明是

{
sum += val;  
std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;
}

【讨论】:

    【解决方案2】:

    使用花括号,花括号中的所有内容都由 for 循环执行

    for (...;...;...)
    {
         // I get executed in the for loop!
         // I get executed in the for loop too!
    }
    // I don't get executed in the for loop!
    

    但是,如果没有花括号,它只会直接执行它之后的语句:

    for (...;...;...)
         // I get executed in the for loop!
    // I don't get executed in the for loop!
    // I don't get executed in the for loop either!
    

    【讨论】:

    • 另请注意:无论空格如何,都会发生这种情况 - 这是下一个语句,而不是下一行。缩进只是为了让程序员更容易阅读程序。
    • 区分下一条语句和下一行非常重要!
    • 感谢这些 cmets 帮助我更好地理解它!
    • 哎呀,我想我可以互换使用术语语句和行:p 应该可以停止。
    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多