在for循环之后,没有{}大括号用于(i = 0; s [i]> ='0'&& s [i] <='9'; ++ i)

时间:2018-10-13 08:56:45

标签: c

我正在学习第2章:“ The C programming language Edition 2”的类型,运算符和表达式,并且遇到了这样的代码片段:

/* atoi: convert s to integer */
int atoi(char s[]) {
    int i, n;

    n = 0;
    for (i=0; s[i]>='0' && s[i] <= '9'; ++i)
        n = 10 * n + (s[i] - '0');

}

让我感到困惑的是n = 10 * n + (s[i] - '0');并未被{}包围,我想应该是

/* atoi: convert s to integer */
int atoi(char s[]) {
    int i, n;

    n = 0;
    for (i=0; s[i]>='0' && s[i] <= '9'; ++i) {
        n = 10 * n + (s[i] - '0');
    }

}

我的假设有什么问题?

2 个答案:

答案 0 :(得分:4)

可以在6.8.5迭代语句中读取for循环的语法:

for ( expression_opt ; expression_opt ; expression_opt ) statement
for ( declaration expression_opt ; expression_opt ) statement

依次,statement是(6.8个语句和块):

statement:
    labeled-statement
    compound-statement
    expression-statement
    selection-statement
    iteration-statement
    jump-statement

compound-statement是您写作时使用的那个

for (i=0; s[i]>='0' && s[i] <= '9'; ++i) {
    n = 10 * n + (s[i] - '0');
}

但是,当您写时:

for (i=0; s[i]>='0' && s[i] <= '9'; ++i)
    n = 10 * n + (s[i] - '0');

您正在使用expression-statement

答案 1 :(得分:2)

如果循环中只有一个语句,则括号是可选的。如果您有多个陈述,则必须大括号。