【问题标题】:if statement doesn't work on a triangle type functionif 语句不适用于三角形函数
【发布时间】:2023-01-10 10:36:39
【问题描述】:

我是一个完全的新手,所以请原谅。 我尝试使用在线编译器,但它们没有响应,而且我没有得到任何返回值(或者无论我输入什么都返回 0)

我试着写了一个函数来检查三角形是否正确,等腰或两者,并分别返回 1,2,3,所有其他情况应返回 0。

int main() {
    int TriangleType(unsigned angle1, unsigned angle2) {
        unsigned angleSum = angle1 + angle2;
        if (angleSum >= 180) {
            return 0;
        } 
    
        /* if triangle is right ---> */ 
        if (angle1==90 || angle2==90 || angleSum==90) {
            /*if it is also  an isosceles --->*/
            if (angle2==45 || angle1==45) {
                return 3;
            }  
            return 1;
        }
           
        /*check if it only a isosceles*/
        if (angle1==(180-angle2)/2 || 
            angle2== (180-angle1)/2 || 
            angle1==angle2) {
            return 2;
        } 
                
        return 0;
    }
    
    TriangleType(110, 111);
}

【问题讨论】:

  • 您也不会对TriangleType 的返回值做任何事情。
  • 一个聪明的编译器可能会意识到整个事情什么都不做,并完全优化它。
  • @kotatsuyaki:C 标准允许嵌套函数。它没有定义嵌套函数。 C 标准只定义了一种旨在扩展的基础语言,它邀请扩展。 GCC 和 Clang 支持嵌套函数作为扩展,而 C 标准允许这样做。

标签: c


【解决方案1】:

首先,不要尝试在 C 中使用嵌套函数。将该函数从 main 中拉出。

int TriangleType(unsigned angle1, unsigned angle2) {
    unsigned angleSum = angle1 + angle2;
    if (angleSum >= 180) {
        return 0;
    } 

    /* if triangle is right ---> */ 
    if (angle1==90 || angle2==90 || angleSum==90) {
        /*if it is also  an isosceles --->*/
        if (angle2==45 || angle1==45) {
            return 3;
        }  
        return 1;
    }
       
    /*check if it only a isosceles*/
    if (angle1==(180-angle2)/2 || 
        angle2== (180-angle1)/2 || 
        angle1==angle2) {
        return 2;
    } 
            
    return 0;
}

int main() {  
    TriangleType(110, 111);
}

其次,这不任何具有函数返回值的东西,所以你当然看不到任何输出。

int main(void) {  
    switch (TriangleType(110, 111)) {
        case 1:
        printf("Right triangle
");
        break;
        case 2:
        printf("Isosceles triangle
");
        break;
        case 3:
        printf("Both types
");
        break;
        default:
        printf("None of the above
");
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多