如何使用bool数据类型?三角形合法性判断代码编译问题求助
编译错误排查:bool函数判断三角形的输出问题
我定义了返回true或false的bool类型函数valid_triangle,想根据它的返回值用printf输出判断结果。已经获取了用户输入的三个正数float类型边长,但用if条件语句判断bool值时代码无法编译,相关代码如下:
bool valid_triangle(float x, float y, float z); int main(void) { float x; float y; float z; do { x = get_float("Enter a length: "); } while(x <= 0); do { y = get_float("Enter other length: "); } while(y <= 0); do { z = get_float("The last one: "); } while(z <= 0); } if(valid_triangle = 1) { printf("It's a triangle"); } bool valid_triangle(float x, float y, float z) { if(x <= 0 || y <= 0 || z <= 0) { return false; } if((x + y <= z) || (x + z <= y) || (y + z <= x)) { return false; } return true; }
编译错误截图:
关键错误点及修正方案
- 代码位置错误:
if判断块写在了main函数外面,C语言里所有执行语句必须放在函数内部,把这个if块移到main函数的闭合大括号}之前。 - 函数调用错误:
if(valid_triangle = 1)里用了赋值符号=,不是判断相等的==,而且没传入参数。正确写法是调用valid_triangle(x, y, z),直接用返回的bool值做判断(不需要和1比较,bool值本身可直接作为条件)。 - 头文件缺失:使用
bool、true、false必须包含<stdbool.h>头文件,否则编译器不认这些关键字。 - 冗余判断(可选优化):
valid_triangle里的边长<=0判断可以去掉,因为main里已经确保输入是正数了,保留也可以做双重校验。
修正后的完整代码
#include <stdio.h> #include <stdbool.h> // 确保get_float函数已声明或定义 float get_float(const char* prompt); bool valid_triangle(float x, float y, float z); int main(void) { float x; float y; float z; do { x = get_float("Enter a length: "); } while(x <= 0); do { y = get_float("Enter other length: "); } while(y <= 0); do { z = get_float("The last one: "); } while(z <= 0); // 正确调用函数并判断结果 if(valid_triangle(x, y, z)) { printf("It's a triangle\n"); } else { printf("It's not a triangle\n"); } return 0; } bool valid_triangle(float x, float y, float z) { // main已确保边长为正,可省略下面的判断 // if(x <= 0 || y <= 0 || z <= 0) // { // return false; // } if((x + y <= z) || (x + z <= y) || (y + z <= x)) { return false; } return true; }
内容的提问来源于stack exchange,提问作者Jc0rreas
相关产品推荐
相关产品推荐

