这是CS50中的练习题,用户应输入3个维度。如果两条边的长度之和大于第三条边的长度,则应打印有效文本,如果不是,则在主打印无效文本。
//validate whether the user's input dimensions can make a triangle
#include <cs50.h>
#include <stdio.h>
bool valid_triangle(float a, float b, float c);
int main(void)
{
//ask user for input
float a = get_float("Enter the length for one side of a triangle: ");
float b = get_float("Enter the length for the second side of a triangle: ");
float c = get_float("Enter the length for the third side of a triangle: ");
//if valid input
if (valid_triangle(a, b, c))
{
printf("Well done. The dimensions %.2f, %.2f, and %.2f make a triangle!\n", a, b, c);
}
//if invalid input
else
{
printf("Please try again. These dimensions do not make a triangle.\n");
}
}
//check user input
bool valid_triangle(float a, float b, float c)
{
if ((a <= 0) || (b <= 0) || (c <= 0))
{
return false;
}
if ((a + b <= c) || (a + c <= b) || (b + c <= a))
{
return false;
}
return true;
}
我的程序似乎只能打印无效的响应,我不能缩小原因。我的debug50
工具不起作用,所以我尝试自己分解它,将bool函数中的第二个return false;
交换为printf("DEBUG");
。这实际上起作用了,并导致程序在main函数中打印我的有效响应。我不知道为什么,但警告是,它将 * 只 * 打印有效的响应。我觉得这个程序是在98%,但有一些小的方式,它达到100%。
1条答案
按热度按时间bq3bfh9z1#
I don't know why though and caveat was that it would only print the valid response.
看到这一行,我认为有一个理解问题。程序不应该总是(正确地)打印成功的答案,而应该只打印某些值。例如,正如其他人在评论中所说的那样,1 1 1
应该是return true
,但1 1 3
应该是return false
。我怀疑你正在使用正确返回false
的值,但你希望它们返回true
。swapping the second return false; in the bool function out for printf("DEBUG");. This actually worked and resulted in the program printing my valid response in the main function.
意味着你没有使用0
或negative
的值,这样就消除了输入中的潜在问题。如果三角形也可以用一条线“过冲”,其他的就像这样:
你需要改变你的
||
到&&
在((a + b <= c) || (a + c <= b) || (b + c <= a))
,但然后程序将总是return true
为积极的非零数字(就像你说的),但我真的不认为这是练习题要求你做的。