【问题标题】:Why is my valid_triangle program from cs50 doesn't work?为什么我的 cs50 中的 valid_triangle 程序不起作用?
【发布时间】:2020-12-16 19:10:03
【问题描述】:

我对这段代码有疑问,因为我似乎无法找到问题所在?这是我试图解决的问题: - 声明并编写一个名为 valid_triangle 的函数,该函数将三个表示三角形三边长度的实数作为参数,并根据这三个长度是否输出真或假可以做一个三角形。

  • 关于三角形的以下规则:
    • 三角形只能有正长度的边。
    • 三角形任意两条边的长度之和必须大于第三条边的长度。
//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 y, 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;
}

【问题讨论】:

  • 嗯,return语句后面还有语句。这可能是你的问题吗??
  • 你永远不会对 w 变量做任何事情。
  • return 语句立即返回
  • 我想问题是你看不到任何打印。这已在答案中得到解决,但请记住,您在提问时应该更加具体。 (另外,如果答案解决了您的问题,请确保您接受它!)
  • 关于`return false; printf("false\n");` 对printf() 的调用将永远不会发生,因为return 将已经退出该函数。建议在return 语句之前调用printf()

标签: c return boolean cs50 function-definition


【解决方案1】:

对于初学者来说,这个 if 语句

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

不正确,应该是这样的

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

和返回语句之后的语句,如这段代码 sn-p

    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 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, b, c ) ? "true" : "false" );
            
    return 0;
}

程序输出是

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

【讨论】:

  • 谢谢你,现在程序可以运行了,虽然它总是返回 false。你知道为什么会这样吗?
  • @William 我在我的答案中附加了一个演示程序,该程序对三角形的有效边产生了正确的结果。
  • 非常感谢,虽然我希望用户输入他想要的数字
  • @William 这只是一个演示程序,显示该函数对三角形的有效边返回 true。
【解决方案2】:

// 此代码应作为 valid_triangle 程序的解决方案。希望对你有帮助

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

//先声明函数,以分号结尾

bool valid_triangle(float x, float y, 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, b, 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 y, 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    相关资源
    最近更新 更多