Значения указателя не добавляются вместе. - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь найти среднюю цену и пробег для транспортных средств в коде.Я использую указатели для запуска значений через функцию, однако выходные данные функций не верны.

#include <stdio.h>
#include <string.h>
#define SIZE 4

typedef struct {
    int year;
    char model[11];
} Model;

typedef struct {
    float price;
} Price;

typedef struct {
    int miles;
} Miles;

typedef struct {
    Model year, model;
    Price price;
    Miles miles;
    struct Car *next;
} Car;

float averagePrice(Car *ptr_car, Car *ptr_car2, Car *ptr_car3, Car* ptr_car4);
int averageMiles(Car *ptr_car, Car *ptr_car2, Car *ptr_car3, Car *ptr_car4);

int main(void) {

    Car f1, im, f2, g;
    int i, cnt, avgmile;
    float avgprice;

    f1.year.year = 56;
    strcpy(f1.model.model, "Ford");
    f1.price.price = 500.00;
    f1.miles.miles = 23000;
    im.year.year = 64;
    strcpy(im.model.model, "Impala");
    im.price.price = 1800.00;
    im.miles.miles = 12000;
    f2.year.year = 57;
    strcpy(f2.model.model, "Ford");
    f2.price.price = 1400.00;
    f2.miles.miles = 22000;
    g.year.year = 65;
    strcpy(g.model.model, "Galaxy");
    g.price.price = 2600.00;
    g.miles.miles = 48000;
    avgprice = averagePrice(&f1, &im, &f2, &g);
    avgmile = averageMiles(&f1, &im, &f2, &g);
    printf("The average price of the vehicle is: %d.\n", avgprice);
    printf("The average miles of the vehicle is: %d.\n", avgmile);


    getchar();
    return 0;
}

float averagePrice(Car *ptr_car, Car *ptr_car2, Car *ptr_car3, Car *ptr_car4) {
    float total;

    total = ptr_car->price.price;
    total =+ ptr_car2->price.price;
    total =+ ptr_car3->price.price;
    total =+ ptr_car4->price.price;

    total = total / SIZE;

    return total;
}

int averageMiles(Car *ptr_car, Car *ptr_car2, Car *ptr_car3, Car* ptr_car4) {
    float total;

    total = ptr_car->miles.miles;
    total =+ ptr_car2->miles.miles;
    total =+ ptr_car3->miles.miles;
    total =+ ptr_car4->miles.miles;

    total = total / SIZE;

    return total;
}

Я знаю, что не могу добавить указатель напрямую вместе, поэтому я добавил их в переменную для храненияЗначение.Тем не менее, похоже, что не хранить значения.Я получаю 0 для значения avgprice и 12000 для значения avgmiles .

1 Ответ

0 голосов
/ 20 мая 2018

Вы допустили три ошибки:

  • Вы написали =+ вместо +=, таким образом, каждый раз переустанавливая значение вместо его добавления.
  • Вы используете %d (десятичный) спецификатор printf вместо спецификатора с плавающей точкой: %f.
  • Вы объявили avgmile как int, когда это на самом делеfloat.
#include <stdio.h>
#include <string.h>
#define SIZE 4

typedef struct {
    int year;
    char model[11];
} Model;

typedef struct {
    float price;
} Price;

typedef struct {
    int miles;
} Miles;

typedef struct {
    Model year, model;
    Price price;
    Miles miles;
    struct Car *next;
} Car;

float averagePrice(Car *ptr_car, Car *ptr_car2, Car *ptr_car3, Car* ptr_car4);
int averageMiles(Car *ptr_car, Car *ptr_car2, Car *ptr_car3, Car *ptr_car4);

int main(void) {

    Car f1, im, f2, g;
    int i, cnt;
    float avgprice, avgmile;

    f1.year.year = 56;
    strcpy(f1.model.model, "Ford");
    f1.price.price = 500.00;
    f1.miles.miles = 23000;
    im.year.year = 64;
    strcpy(im.model.model, "Impala");
    im.price.price = 1800.00;
    im.miles.miles = 12000;
    f2.year.year = 57;
    strcpy(f2.model.model, "Ford");
    f2.price.price = 1400.00;
    f2.miles.miles = 22000;
    g.year.year = 65;
    strcpy(g.model.model, "Galaxy");
    g.price.price = 2600.00;
    g.miles.miles = 48000;
    avgprice = averagePrice(&f1, &im, &f2, &g);
    avgmile = averageMiles(&f1, &im, &f2, &g);
    printf("The average price of the vehicle is: %f.\n", avgprice);
    printf("The average miles of the vehicle is: %f.\n", avgmile);


    getchar();
    return 0;
}

float averagePrice(Car *ptr_car, Car *ptr_car2, Car *ptr_car3, Car *ptr_car4) {
    float total;

    total = ptr_car->price.price;
    total += ptr_car2->price.price;
    total += ptr_car3->price.price;
    total += ptr_car4->price.price;

    total = total / SIZE;

    return total;
}

int averageMiles(Car *ptr_car, Car *ptr_car2, Car *ptr_car3, Car* ptr_car4) {
    float total;

    total = ptr_car->miles.miles;
    total += ptr_car2->miles.miles;
    total += ptr_car3->miles.miles;
    total += ptr_car4->miles.miles;

    total = total / SIZE;

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