Несовместимые типы при назначении типов и недопустимых операндов двоичным - PullRequest
0 голосов
/ 09 января 2019

Я работаю над тем, что мне показалось простым, но я столкнулся с некоторыми проблемами, которые не могу решить. Проблемы вращаются вокруг функции resitance_current в коде. Я получаю два сообщения об ошибке:

1) несовместимые типы при назначении типу 'float *' из типа 'float'

2) недопустимые операнды в двоичном / (имеют «float» и «float *»)

Я пытаюсь использовать функцию resitance_current для расчета сопротивления и тока. Для этого я передаю значения «длины» провода, «area_circle» провода и «напряжения» и, используя формулу удельного сопротивления, найти R:

R = ρ L / A

и закон Ома, чтобы найти I

V = R * I

Кажется, я не могу понять, почему типы поплавков конфликтуют Мне нужно сохранить одну функцию resitance_current для расчета сопротивления и тока, поэтому помощь в прохождении указателей с плавающей точкой и в решении текущей проблемы будет высоко оценена.

Заранее спасибо за помощь;)

Код:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

float areaOfcircle(float radius_circle)
{
    float area_circle;
    area_circle = M_PI * radius_circle * radius_circle;

    return area_circle;
}
void resitance_current(float length, float area_circle, float voltage, float* resistance, float* current)
{
    float resistivity;
    printf("%f %f %f", length, area_circle, voltage);
    resistivity = 1.782*exp(-8);
    resistance = ((resistivity*length)/area_circle);
    current = (voltage/resistance);
}
int main()
{
    float radius, voltage, length, current, resistance;

    // take radius as input
    printf("Enter the radius of wire : ");
    scanf("%f", &radius);
    if (radius < 0)
    {
        exit(1);
    }
    else
    {
        printf("Enter the Voltage of circuit : ");
        scanf("%f", &voltage);
        if (voltage < 0)
        {
            exit(1);
        }
        else
        {
            printf("Enter the Length of Wire : ");
            scanf("%f", &length);
            if (length < 0)
            {
                exit(1);
            }
            else
            {
                printf("Cross Sectional Area of Wire : %.2f", areaOfcircle(radius));
                resitance_current(length, areaOfcircle(radius), voltage, &resistance, &current);
                printf("Resistance = %f , Current = %f", resistance, current);
                printf("\n");
            }

        }
    }

    return 0;
}

1 Ответ

0 голосов
/ 09 января 2019

Когда вы передаете аргумент-указатель в функцию, как вы делаете с float *resistance и float *current, вы также должны разыменовать его, когда вы присваиваете ему значение l или получаете доступ к указанному значению :

*resistance = ((resistivity*length) / area_circle);
*current = (voltage / *resistance);

Обратите внимание, что я поставил пробел между оператором деления / и оператором разыменования *, чтобы компилятор не видел начало многострочного комментария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...