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

时间:2019-02-04 19:12:46

标签: c if-statement calculator

首先,下面是我到目前为止的代码。

计算器可以完成我希望做的所有事情,减去它在计算中仍然包含负数的事实。如果半径表示的数字小于零,我希望它什么也不做,但如果数字为非负数,我仍然希望计算。但是,我在使用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);
}

3 个答案:

答案 0 :(得分: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 :(得分:1)

C编译器不关心格式,理论上您可以做任何您想做的事,对于什么是/不是“适当的格式”,没有共识。

但是,大多数程序员坚持使用特定的样式,以便更轻松地阅读源代码。如果您在团队中工作,那么团队中的所有程序员都使用相同的样式以使所有源代码保持一致是很好的。为此,可能会有正式的“样式指南”,如果有,则应遵循。

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

    括号内的
  • 嵌套块以某种方式相对于父块缩进(“ N个空格字符”或“ N个制表符”)

  • switch语句的
  • 情况是缩进规则的例外。通常,即使没有括号,每个案例的陈述也会缩进;并且case关键字本身可以或不可以由父开关的花括号缩进。

  • 所有大括号本身总是在一条线上;或起始括号位于行尾,终止括号可能位于包含相关语句的行首。

  • 当块由单个语句组成时;它要么总是使用大括号并自己占用一行,要么它不再使用大括号并与其父代共享同一行。

  • n_train = n_records([gs://path-to-tfrecords/record1, gs://path-to-tfrecords/record2]) steps_per_epoch = n_train // batch_size 对始终是“由一个语句组成的语句块”规则的例外(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;
}

答案 2 :(得分:0)

  

if(&radius> -1);

&之前的radius丢掉并输掉分号:

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

我需要一个“ else”吗?

在这种情况下,不会。您没有在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
}

这种样式对我来说最容易阅读,可以更清楚地知道块的开始或结束位置,等等。它还增加了垂直空间的使用,因此在窗口中获得的代码更少,这意味着您可能需要来回滚动多一点。

在Kernighan&Ritchie流行的K&R风格中,开头{ifelse位于同一行:

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

不是相当,因为它很容易识别出块的起始位置,但也不太糟糕,而且更紧凑,因此您可以在有限的空间中容纳更多的代码行。

然后有一种样式让我很讨厌 hate ,它将结尾}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");}

格式化仅对您和必须阅读/维护您的代码的任何人都重要。无论选择哪种样式,都应与之保持一致。