在基本C编程中使用“If语句”。我该如何正确格式化它们?

问题描述 投票:-1回答:3

首先,我到目前为止的代码如下所示。

计算器执行我想要的所有操作,减去它在计算中仍然包含负数的事实。如果呈现为半径的数字小于零,我希望它什么也不做,但仍然计算该数字是否为非负数。但是,我在使用if语句时遇到问题。我之前没有使用过这些,因为我只是一个初学者。我只需要朝着正确的方向努力。我需要一个“别的”吗?任何帮助是极大的赞赏!

#include <stdio.h>

int radius, area;

main()
{
    printf("Enter radius: ");
    scanf("%d", &radius);
    {
    if (&radius > -1);  {
         area = (int)(3.14159 * radius * radius);
         printf("Area = %d\n", area);}
    else {
       return(0); }
    }
   return(0);
}
c if-statement calculator
3个回答
5
投票

删除分号

删除这一行的分号

if (&radius > -1);  {  

应该

if (radius > -1)  {

应该这样做,以便更容易跟踪if-else语句

改变这些路线

printf("Area = %d\n", area);}

return(0); }

printf("Area = %d\n", area);
}

return(0); 
}

这是if-else语句的样式,我认为跟踪代码更容易

if (condition) {
    statements;
} 
else if (condition) { 
    statements;
}
else {
    statements;
}

1
投票

C编译器不关心格式化,理论上你可以做任何你喜欢的事情,并且对于什么是“正确的格式化”没有共识。

但是,大多数程序员都坚持使用特定的样式,以便更容易阅读源代码;如果你在团队中工作,那么团队中的所有程序员都使用相同的样式,以便所有源代码都是一致的,那就太好了。要做到这一点,可能会有一个正式的“风格指南”,如果有,你应该遵循它。

除此之外,几乎每个人都遵循一些共同规则:

  • 由大括号分隔的嵌套块以某种方式缩进(使用“N空格字符”或“N制表符”)相对于父块
  • switch语句的例子将是缩进规则的例外。通常情况下,每个案例的陈述都是缩进的,即使没有大括号;并且case关键字本身可以由父交换机的大括号缩进,也可以不缩进。
  • 要么所有的牙箍都要自己在一条线上;或者起始大括号位于行的末尾,结束大括号可能位于包含相关语句的行的开头
  • 当一个块由一个语句组成时;它总是使用大括号并且自己占用一行,或者它从不使用大括号并与其父级共享同一行。
  • else if对总是“块由单个语句组成”规则的例外(if是一个从不被视为单独块的单个语句,人们假装else if是单个elseif关键字)。

这意味着什么(取决于谁在争论时得到他们的方式)这可能是可以接受的:

int main() {
    int area;

    printf("Enter radius: ");
    scanf("%d", &radius);

    switch(radius) {
    case 0:
        return 0;
    case 1:
        return 1;
    }

    if (&radius > -1) {
        area = (int)(3.14159 * radius * radius);
        printf("Area = %d\n", area);
    } else return -1;
    return area;
}

..这也可以接受:

int main()
{
    int area;

    printf("Enter radius: ");
    scanf("%d", &radius);

    switch(radius)
    {
        case 0:
            return 0;
        case 1:
            return 1;
    }

    if (&radius > -1)
    {
        area = (int)(3.14159 * radius * radius);
        printf("Area = %d\n", area);
    }
    else
    {
        return -1;
    }
    return area;
}

0
投票

if(&radius> -1);

&之前丢失radius并丢失分号:

if ( radius > -1 ) { ... }

我需要一个“别的”吗?

在这种特殊情况下,没有。你没有在else分支中做任何你没有无条件做的事情(即return声明)。如果只在条件失败时需要采取特定操作,例如打印错误消息,则只需要一个else分支:

if ( radius > -1 )
{
  ...
}
else
{
  printf( "Radius needs to be non-negative!\n" );
}
return 0;

至于如何格式化,有多种风格各有优缺点。我喜欢的风格有自己的{}

if ( condition )
{
  // if branch
} 
else if ( another condition )
{
  // else if branch
}
else
{
  // else branch
}

这种风格对我来说最容易阅读,使得它在块开始或结束时更清晰等。它还增加了垂直空间的使用,因此您在窗口中获得的代码更少,这意味着您可能需要来回滚动更多。

这就是所谓的K&R风格,因为它被Kernighan&Ritchie推广,其中开放的{ifelse在同一条线上:

if ( condition ) {
  // if branch
} 
else if ( condition ) {
  // else if branch
}
else {
  // else branch
}

在块开始的地方挑选不是那么容易,但也不是太糟糕,而且更紧凑,所以你可以在有限的空间内安装更多的代码行。

然后有一种我讨厌讨厌的风格,它将关闭的}放在与elseelse if相同的线上:

if ( condition ) {
  // if branch
} else if ( condition ) {
  // else if branch
} else {
  // else branch
}

我发现这种风格很难阅读和遵循。但是,它是最紧凑的风格,通常用于屏幕空间非常有限的情况下(例如在演讲或教程中的PowerPoint幻灯片中)。

请注意,只要打开和关闭大括号正确匹配,编译器就不关心您使用哪种样式。您可以将所有内容放在一行中,几乎没有空格,如:

if(radius>-1){area=(int)(3.14159*radius*radius);printf("Area = %d\n", area);}else{print("Radius needs to be non-negative!\n");}

格式化只对您和任何必须阅读/维护代码的人有用。无论你选择哪种风格,都要与之保持一致。

© www.soinside.com 2019 - 2024. All rights reserved.