Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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
使用;“如果声明”;在basic C编程中。如何正确格式化它们?_C_If Statement_Calculator - Fatal编程技术网

使用;“如果声明”;在basic C编程中。如何正确格式化它们?

使用;“如果声明”;在basic C编程中。如何正确格式化它们?,c,if-statement,calculator,C,If Statement,Calculator,首先,我得到的代码如下 计算器做了我希望它做的一切,减去它在计算中仍然包含负数这一事实。如果以半径表示的数字小于零,我希望它什么也不做,但如果数字是非负的,它仍然会计算。但是,我在使用if语句时遇到问题。我以前没有用过这些,因为我只是一个初学者。我只需要往正确的方向推一下。我需要“其他”吗?非常感谢您的帮助 #include <stdio.h> int radius, area; main() { printf("Enter radius: "); scanf("

首先,我得到的代码如下

计算器做了我希望它做的一切,减去它在计算中仍然包含负数这一事实。如果以半径表示的数字小于零,我希望它什么也不做,但如果数字是非负的,它仍然会计算。但是,我在使用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);
}
#包括
int半径,面积;
main()
{
printf(“输入半径:”);
扫描频率(“%d”和半径);
{
如果(&半径>-1){
面积=(整数)(3.14159*半径*半径);
printf(“区域=%d\n”,区域);}
否则{
返回(0);}
}
返回(0);
}

删除分号

删除此行中的分号

if (&radius > -1);  {  
应该是

if (radius > -1)  {
应该这样做,以便于跟踪if-else语句

更改这些行

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

return(0); }

这里是if-else语句的风格,我认为跟踪代码更容易

if (condition) {
    statements;
} 
else if (condition) { 
    statements;
}
else {
    statements;
}
如果(&半径>-1)

丢失
半径之前的
,并丢失分号:

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
}
这种样式对我来说是最容易阅读的,它使块开始或结束的位置更清晰,等等。它还增加了垂直空间的使用,因此窗口中的代码更少,这意味着您可能需要来回滚动更多

克尼汉和里奇(Kernighan&Ritchie)推广了K&R风格,其中开头的
{
if
else
在同一行:

if ( condition ) {
  // if branch
} 
else if ( condition ) {
  // else if branch
}
else {
  // else branch
}
不太容易找出块的起始位置,但也不太糟糕,而且更紧凑,因此可以在有限的空间中容纳更多的代码行

然后是一种我非常讨厌的风格,它将结束语
}
else
else(如果
)放在同一行:

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");}

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

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;
}
…这也是可以接受的:

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;
}

零散分号:
if(&radius>-1);{
-->
if(&radius>-1){
与问题无关,但是
return
不是一个函数。您不需要将返回值放在括号中。而包含
if else
的块的目的是什么?OT:为了便于阅读和理解:1)遵循公理:*每行只有一条语句,并且(最多)每个语句一个变量声明。注意,将右大括号视为一个单独的语句。关于该语句:
main()
一些旧的编译器(和visual studio)将允许这样做。但是,函数
main()
只有两个有效的签名:
int main(void)
int main(int argc,char*argv[])
关于:
if(&radius>-1);{
这有两个错误:1)不要使用
radius
的地址。您实际需要的是
radius
2)嵌入式sem的内容