#include <stdio.h>
#define PI 3.141593
int main (void)
{
float out, outrad, outarea, in, inrad, inarea, final;
printf("Enter outer diameter: ");
scanf("%f", &out);
outrad = out/2;
outarea = PI * (outrad * outrad);
printf("Enter inner diameter: ");
scanf("%f", &in);
inrad = in/2;
inarea = PI * (inrad * inrad);
final = outarea - inarea;
//if ( out < in)
//{
// printf("Invald inputs: Inner diameter must be less than outer diameter\n");
//}
if ( out < 0 && in < 0)
{
printf("Invalid inputs: Both diameters must be positive.\n");
}
else if ( out < in )
{
printf("invalid inputs: Inner diameter must be less than outer diameter\n");
}
else {
printf("Surface area: %0.6f\n", final);
}
return 0;
}
程序编译并正常工作,但如果输入小于0则不执行第一个IF语句。它只是继续计算表面积而不管它。我错过了一些语法吗?
Run 1
Enter outer diameter: 13.5
Enter inner diameter: 0
Surface area: 143.138824
Run2
Enter outer diameter: 5
Enter inner diameter: 4
Surface area: 7.068584
Run3
Enter outer diameter: 4
Enter inner diameter: 5
invalid inputs: Inner diameter must be less than outer diameter
Run4
Enter outer diameter: 4
Enter inner diameter: 0
Surface area: 12.566372
Run5
Enter outer diameter: 0
Enter inner diameter: 0
Surface area: 0.000000
答案 0 :(得分:1)
在您的情况下使用||
代替&&
。
在您的示例输入中,您甚至从未尝试触发此条件:
Run 1
Enter outer diameter: 13.5
Enter inner diameter: 0 // Is "in" less than zero? NO! It is *exactly* zero
Surface area: 143.138824
如果你想测试一下:
Run 1
Enter outer diameter: 13.5
Enter inner diameter: -5 // Is "in" less than zero? Yes!
Invalid inputs: Both diameters must be positive.
答案 1 :(得分:1)
将&&
替换为||
。
如果OR out小于零,基本上你想运行它。 如果两者都小于零,它应该运行,因为in AND out小于零。
答案 2 :(得分:1)
if ( out<0 && in < 0)
这是代码中的错误。 &&
仅在条件评估为真时才评估为真。因此,即使您的某个条件为真,即小于0而其他条件为假,即大于0,语句的计算结果为false,并且不执行代码。因此,您需要进行||
评估,以便即使只有一个条件评估为true,也会执行您的代码。
我不知道它是否是拼写错误,但当前格式的代码应该会出现编译错误。但是因为它正在编译,所以你必须在这里输入错误。但无论如何:
第20和29行
diameter\n");
未评论且格式不正确。所以改善你的格式。
答案 3 :(得分:1)
如果
两种直径都必须为正。
然后
if( !(out > 0 && in > 0) )
{
printf("Invalid inputs: Both diameters must be positive.\n");
}