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