C语言 每次我开始项目总是只写“这是无效的”,即使我给予的数字是正确的[关闭]

ttvkxqim  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(236)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question

#include <cs50.h>
#include <stdio.h>
 
bool valid_triangel(double x , double y , double z );

int main(void)
{
    double a = get_double   ("give me first length : ");
    
    double b = get_double  ("give me second length : ");
     
    double c = get_double   ("give me third length : ");
    
    bool valid_triangel(double a , double b , double c );
    
    if ( (bool) valid_triangel ) { printf("THIS IS NOT VALID /n "); }
   
    else { printf("THAT IS A TRIANGEL /n " ); }
    
}

bool valid_triangel(double x , double y , double z )
{
    if ((x + y >= z )  || (x + z >= y) || (z + y >= x ) )  { return false ; }
    
    if ( x <= 0 || y <= 0  || z <= 0 )  { return false ; }
    
    return true ;
    
}

我们的期望是,如果您写入的数字没有给出三角形,则它会写入"这是无效的",如果数字给出三角形,则它会写入"这是三角形"

vuktfyat

vuktfyat1#

1.您正在将函数的地址强制转换为(bool) valid_triangel,而不是调用它。它将始终为非NULL,并且无论输入如何,都将执行if条件的相应true分支。
1.(非问题)我没有安装cs50.h,所以我写了一个快速的get_double()来测试你的代码。
1.删除了main()中的valid_tringel()声明。
1.修正了排印错误(三角形)。

  1. (x + y >= z ) || (x + z >= y) || (z + y >= x )valid_triangle()中反转。当您返回布尔值时,只需直接express is而不是if条件:
    根据第一三角不等式定理,三角形任意两边的长度之和必须大于第三边的长度。
    1.在main()中使用早期返回样式,因此正常情况下不会缩进(纯粹是样式问题)。
#include <stdio.h>
#include <stdbool.h>

double get_double(const char *s) {
    printf("%s", s);
    double d;
    scanf("%lf", &d);
    return d;
}

bool valid_triangle(double x, double y, double z) {
    return
        x > 0 &&
        y > 0 &&
        z > 0 &&
        x + y > z &&
        x + z > y &&
        z + y > x;
}

int main(void) {
    double a = get_double("give me first length : ");
    double b = get_double("give me second length : ");
    double c = get_double("give me third length : ");
    if(!valid_triangle(a, b, c)) {
        printf("THIS IS NOT VALID\n");
        return 0;
    }
    printf("THAT IS A TRIANGLE\n");
}

下面是示例输出:

give me first length : -1
give me second length : 1
give me third length : 10
THIS IS NOT VALID

give me first length : 1
give me second length : 2
give me third length : 3
THIS IS NOT VALID

give me first length : 7
give me second length : 10
give me third length : 5
THAT IS A TRIANGLE

相关问题