为什么我的cs50中的valid_triangle程序不起作用?

问题描述

代码有问题,因为我似乎找不到问题?这是我尝试解决的问题:-声明并编写一个称为valid_triangle的函数,该函数将代表三角形三个边的长度的三个实数作为其自变量,并根据这三个长度来输出true或false可以做成三角形。

  • 关于三角形的以下规则:
    • 三角形只能有正长度的边。
    • 三角形的任意两个边的长度之和必须大于第三个边的长度。
//includes
#include <stdio.h>
#include <cs50.h>

bool valid_triangle(float x,float y,float z);

int main (void)
{
   float x = get_float("x:");
   float y = get_float("y:");
   float z = get_float("z:");
   bool w = valid_triangle(x,y,z);
}

bool valid_triangle(float x,float z)
{
    // only positive sides
    if (x <= 0 || y <= 0 || z <= 0)
    {
        return false;
        printf("false\n");
    }

    // sum of the lengths of any two sides of the triangle must be greater than the length of the third side.
    else if (x + y < z || x + z < y || y + z < x)
    {
        return false;
        printf("false\n");
    }
    else
    {
        return true;
        printf("True\n");
    }

    return 0;
}

解决方法

对于初学者来说,if语句

else if (x + y < z || x + z < y || y + z < x)

不正确,应该看起来像

else if (x + y <= z || x + z <= y || y + z <= x)

返回语句之后的语句,如此代码片段

    return false;
    printf("false\n");

没有效果。看来你是说

    printf("false\n");
    return false;

尽管printf的调用不应在函数内部。

您只能在main之类的地方拨打一次printf

bool w = valid_triangle(x,y,z);
printf( "%s\n",w == false ? "False" : "True" );

也是函数中的最后一个return语句

return 0;

是多余的。

这是一个演示程序。

#include <stdio.h>
#include <stdbool.h>

bool valid_triangle(float x,float y,float z)
{
    // only positive sides
    if (x <= 0 || y <= 0 || z <= 0)
    {
        return false;
    }
    // sum of the lengths of any two sides of the triangle must be greater 
    // than the length of the third side.
    else if ( x + y <= z || x + z <= y || y + z <= x)
    {
        return false;
    }
    else
    {
        return true;
    }
}

int main(void) 
{
    float a = 4.0f,b = 5.0f,c = 6.0f;
    printf( "%.1f,%.1f,%.1f are sides of a triangle - %s\n",a,b,c,valid_triangle( a,c ) ? "true" : "false" );
            
    return 0;
}

程序输出为

4.0,5.0,6.0 are sides of a triangle - true
,

// 这段代码应该可以作为 valid_triangle 程序的解决方案。希望有帮助

#include <cs50.h>
#include <stdio.h>

//先声明函数,最后用分号

bool valid_triangle(float x,float z);

int main(void)
{
 // Ask users for inputs
 float a = get_float("Give me the first integer to form a triangle:  ");
 float b = get_float("Give me the second integer to form a triangle:  ");
 float c = get_float("Give me the third integer to form a triangle:  ");


// function call
bool result=valid_triangle(a,c);

//set condition for your boolean variable 'result'
 if (result == true)
 {
  printf("True \n");
 }
else
 {
 printf("False \n");
 }

}


//function definition,without any semi-colon at the end

bool valid_triangle(float x,float z)
{
//checking if any of the sides is negative or equal to zero
if (x<=0 || y<=0 || z<=0)
{
    return false;
}

// sum of the lengths of any two sides of the triangle must be greater than the length 
//of the third side.

else if ((x+y<=z) || (x+z<=y) || (z+y<=x))
{
    return false;
 }
 return true;
}