在C中忽略IF语句

时间:2018-04-09 04:15:02

标签: c unix

#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

4 个答案:

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