C中使用的括号及其用途

Lou*_*ise 3 c

我很抱歉,如果以前曾经问过这个,但我是C的初学者,我想知道是否有人可以帮助解释()下面代码中括号的使用,我从在线教程中获取它并运行正常,但其中有一部分我不明白.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int age;
    printf("Please enter the age");
    scanf("%d", &age);
    if (age > 18 /*condition */ ) {
        printf("You may enter the club");
        if (age < 21)
       {
        printf("The age is greater than 18 but less than 21");
Run Code Online (Sandbox Code Playgroud)

} 其他 (printf("The age is greater than 18 and greater than 21"));

} else if (age == 18)
{
    printf("The age is equal to 18");
}
else {
    printf("The age is not greater than 18");
    }

return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我收集的内容,圆括号用于包含if语句的条件,大括号用于表示遵循该条件的操作.除了以粗体显示的嵌套else条件外,else语句后跟一个包含print命令的圆括号.

任何人都可以解释为什么会这样吗?

AnT*_*AnT 5

圆括号()(以及大括号{})可能出现在几个不同的上下文中,服务于不同的角色.

if当您需要将多个语句组合成一个复合语句以作为其真或假分支时,通常需要使用大括号if.例如,在您的情况下,每个分支if (age < 21)只是一个语句,这意味着其分支中的大括号不是必需的.你可以把它if写成

if (age < 21)
  printf("The age is greater than 18 but less than 21");
else
  printf("The age is greater than 18 and greater than 21");
Run Code Online (Sandbox Code Playgroud)

同时真正的分支if (age > 18)包含多个语句,这就是为什么你需要大括号的原因.

同时,围绕着圆括弧if条件是只是一个语法元素if语句-语法要求各地对圆括弧的if条件,就像它需要圆括号for,while,函数调用和其他语法结构.

但是圆括号也可以用于完全不同的角色:在表达式中,其主要目的是将操作符与其操作数分组,如(2 + 2) * (5 - 3).但是,在表达式中,您可以自由使用冗余括号,例如,您可以编写(((2))) + (3)而不是2 + 3.或者你可以在整个表达式周围添加多余的括号,例如(((2 + 3)))代替(2 + 3)等等.

这正是您在示例中观察到的内容.您的

printf("The age is greater than 18 and greater than 21");
Run Code Online (Sandbox Code Playgroud)

只是一个表达式语句,即一个由单个表达式组成的语句.那个表达是一个呼唤printf.如果您愿意,可以将该呼叫附加到任意数量的冗余圆括号中

(((printf("The age is greater than 18 and greater than 21"))));
Run Code Online (Sandbox Code Playgroud)

没有改变它的含义.

这两个因素的结合:事实上你并不真正需要{}printf,以及你可以根据需要放置尽可能多的事实,()printf会产生一种幻觉,以至于在某种情况下,printf一对{}被某种方式取代了对().实际上,这是两个完全不相关的行为.

无论如何,它只是一种语法上的好奇,而不是具有任何实际价值的东西.如何在教程的代码中发生 - 任何人的猜测.