Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中使用的括号及其用途_C - Fatal编程技术网

C中使用的括号及其用途

C中使用的括号及其用途,c,C,如果以前有人问过这个问题,我很抱歉,但是我是C语言的初学者,我想知道是否有人可以帮助解释一下下面代码中()括号的用法 我从一个在线教程中得到了它,它运行得很好,但有一部分我不明白 #包括 #包括 int main() { 智力年龄; printf(“请输入年龄”); scanf(“%d”和年龄); 如果(年龄>18/*状况*/){ printf(“您可以进入俱乐部”); if(年龄子句中有一个语句,那么这些括号 5 < /强>可以省略,尽管有些人认为这种编码方式很差。在本例中,大括号被省略。此外

如果以前有人问过这个问题,我很抱歉,但是我是C语言的初学者,我想知道是否有人可以帮助解释一下下面代码中
()
括号的用法

我从一个在线教程中得到了它,它运行得很好,但有一部分我不明白

#包括
#包括
int main()
{
智力年龄;
printf(“请输入年龄”);
scanf(“%d”和年龄);
如果(年龄>18/*状况*/){
printf(“您可以进入俱乐部”);
if(年龄<21岁)
{
printf(“年龄大于18岁但小于21岁”);
}否则
(printf(“年龄大于18岁且大于21岁”);
}否则,如果(年龄==18岁)
{
printf(“年龄等于18岁”);
}
否则{
printf(“年龄不超过18岁”);
}
返回0;
}
根据我收集的信息,圆括号用于包含if语句的条件,而圆括号用于说明遵循该条件的操作。 除了以粗体显示的嵌套else条件外,else语句后面紧跟着一个圆括号,圆括号中包含打印命令


有人能解释一下为什么会这样吗?

我怀疑这是打字错误。任何表达式,包括括号中的表达式,都可以随时引入。这里的大括号更有意义,如果格式正确,它将与代码的其余部分保持一致。

条件
else
后面还应该有花括号,表示哪些语句应该作为
else
子句的一部分执行。如果在<代码> Outs//Cuth>子句中有一个语句,那么这些括号<强> 5 < /强>可以省略,尽管有些人认为这种编码方式很差。在本例中,大括号被省略。此外,还添加了一对冗余的普通括号,这使得代码更加混乱

我强烈建议用大括号替换这些括号,即使代码在技术上是正确的。此外,代码应该使用一致的缩进模式编写。它使程序的逻辑流程更易于遵循:

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");
        }
        else {
           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;
}
intmain()
{
智力年龄;
printf(“请输入年龄”);
scanf(“%d”和年龄);
如果(年龄>18/*状况*/){
printf(“您可以进入俱乐部”);
if(年龄<21岁){
printf(“年龄大于18岁但小于21岁”);
}
否则{
printf(“年龄大于18岁且大于21岁”);
}
}
否则,如果(年龄==18岁){
printf(“年龄等于18岁”);
}
否则{
printf(“年龄不超过18岁”);
}
返回0;
}

看起来像是打字错误:没有合法的编程理由使用这些括号。但请注意,它编译得很好,因为它不做任何事情:(x)与x相同,因此可以将printf(…)包含在更多的括号中,但不会改变任何内容。

圆括号
()
(以及花括号
{}
)可能出现在多个不同的上下文中,扮演不同的角色

当您需要将上的多个语句组合成一个复合语句,以用作
if
的真分支或假分支时,通常需要使用
if
中的花括号。例如,在您的例子中,
if(age<21)
的每个分支都已经是一条语句了,这意味着它的分支中的花括号实际上是不必要的。你可以把
写成

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");
只是一个表达式语句,即由单个表达式组成的语句。该表达式是对
printf
的调用。如果您愿意,可以将该调用包含在任意数量的冗余圆括号中

(((printf("The age is greater than 18 and greater than 21"))));
意思没有改变

这两个因素的结合:事实上你不需要在
printf
周围放置
{}
,事实上你可以在
printf
周围放置任意多的
()
,这就产生了一种错觉,在这种情况下,
printf
一对
{/code>被一对
()
。实际上,这是两个完全不相关的操作


无论如何,这只是一种语法上的好奇,没有任何实用价值。它是如何发生在教程中的代码中的?任何人都可以猜测。

这是合法的,但绝对没有用,这得益于C语言灵活的语法系统

这句话是合法的:

int i =  printf("The age is greater than 18 and greater than 21");
可能是这样吗

int i =  (printf("The age is greater than 18 and greater than 21"));
(printf("The age is greater than 18 and greater than 21"));
可能是这样吗

int i =  (printf("The age is greater than 18 and greater than 21"));
(printf("The age is greater than 18 and greater than 21"));
如果printf返回void是不合法的。
把它看成是一个表达式,它是用OracyPosiy括起来的,但是它的值没有被使用。它可能是一个键入,因为代码仍然是合法的。
printf
是一个返回
int
的函数

因此,
printf
的结果是一个表达式(因此
printf()
是一个表达式)

大括号中的表达式是一个表达式

因此,
printf()


语句必须紧跟在
else
之后。因此这里没有语法问题。

您将熟悉括号在数学表达式中的常用用法

例如,
3*(1+1)
将计算为6,因为加法发生在乘法之前,乘法使用右侧的值

您可能不知道的是,C中的函数调用是表达式。因此,即使对
printf()
的返回值未做任何处理,将其放在多余的括号中也是合法的(尽管有些古怪)

因此,以下是有意义的:

  int count=printf("Hello");
假设没有错误,
count
将被初始化为5(打印的字符数)。但写入同样有效(尽管是多余的):

  int count=(printf("Hello"));
但是赋值不影响语法,以下是合法的