Попытка создать функцию, чтобы увидеть, является ли треугольник действительным, получая сообщение об ошибке в моей функции - PullRequest
0 голосов
/ 21 апреля 2020

Может ли кто-нибудь помочь мне с этой ошибкой, когда я компилирую свой код в C, я получаю следующие сообщения об ошибках:

error: too few arguments to function call, at least argument 'format' must be specified

как я могу добавить формат к моему аргументу? Какой формат должен иметь мой аргумент?

Ниже мой код:

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

bool valid_triangle(float a, float b, float c);
int main(void)
{
    printf("give me the first side of the triangle: \n");
        float a = get_float();
    printf("give me the second side of the triangle: \n");
        float b = get_float();
    printf("give me the third side of the triangle: \n");
        float c = get_float();
     bool i = valid_triangle ( a, b, c);

    if (i == true);
    {
        printf("triangle is true: \n");
    }
     if (i == false);
    {
        printf("triangle is false: \n");
    }
}
     bool valid_triangle(float a, float b, float c)
    {
        if (a<=0 || b<=0 || c<=0) // check for all positive sides
        {
            return false;
        }
        if ((a+b<=c || a+c<=b || b+c<=a)) // check that the sum of any two length is greater than the length of the third one
        {
            return false;
        }

    return true; //if both tests are negative, the result is true
    }

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Похоже, что вы вызвали функцию valid_triangle до того, как определили ее.

bool valid_triangle(float a, float b, float c);

Также вы не определили функцию get_float. Вы можете использовать следующее:

float a;
printf("give me the first side of the triangle: ");
scanf("%f", &a);
printf("First = %f\n",a); 

Программа работает только при правильном порядке. Импортируйте соответствующие модули и определите все нужные вам функции:

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

bool valid_triangle(float a, float b, float c)
{
    if (a<=0 || b<=0 || c<=0) // check for all positive sides
    {
        return false;
    }
    else if ((a+b<=c || a+c<=b || b+c<=a)) // check that the sum of any two length is greater than the length of the third one
    {
        return false;
    }
    else
    {
        return true;
    }
}

Затем вызовите основную функцию:

int main(void)
{
    float a;
    printf("give me the first side of the triangle: ");
    scanf("%f", &a);
    printf("First = %f\n",a);

    float b;
    printf("give me the second side of the triangle: ");
    scanf("%f", &b);
    printf("Second = %f\n",b);


    float c;
    printf("give me the third side of the triangle: ");
    scanf("%f", &c);
    printf("Third = %f\n",c);

    bool validity = valid_triangle(a, b, c);
    {
        if (validity == true)
        {
            printf("Valid triangle\n");
        }
        else
        {
            printf("Invalid triangle\n");
        }
    }
return 0;
}
0 голосов
/ 21 апреля 2020
bool i = valid_triangle ( a, b, c);
if (i == true);
{
    printf("triangle is true: \n");
}
if (i == false);
{
    printf("triangle is false: \n");
}

Здесь много проблем. Во-первых, у вас есть точки с запятой после условий if, это завершает оператор if раньше, чем вы предполагали, и поэтому операторы printf не являются частью ваших операторов if.

Во-вторых, эти два варианта являются альтернативными, поэтому вы должны написать один if ... else ... утверждение, а не два if ... утверждения.

В-третьих, у вас есть очень распространенное недоразумение ie о том, что переменные bool необходимо сравнивать с true (или false), но это не так , Булевы переменные являются истинными или ложными сами по себе, их не нужно сравнивать с истинными или ложными. Это не ошибка, это работает, но показывает отсутствие понимания.

В-четвертых, i - действительно ужасное имя для этой переменной, как насчет valid?

Соединив все это вместе, мы получим

bool valid = valid_triangle(a, b, c);
if (valid)
{
    printf("triangle is valid: \n");
}
else
{
    printf("triangle is invalid: \n");
}

И, честно говоря, я бы даже не использовал здесь переменную. Этот код также является правильным

if (valid_triangle(a, b, c))
{
    printf("triangle is valid: \n");
}
else
{
    printf("triangle is invalid: \n");
}

Ни одна из проблем не является той, на которую вы действительно жаловались (которая, кажется, не воспроизводима), но, надеюсь, это полезно.

...