【问题标题】:Pointer values are not being added together.指针值没有被加在一起。
【发布时间】:2018-10-30 01:04:43
【问题描述】:

我正在尝试查找代码中车辆的平均价格和里程数。我正在使用指针通过函数运行值,但是函数的输出不正确。

#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;
}

我知道我不能直接将指针添加在一起,所以我将它们添加到变量中以存储值。但是,它似乎不存储这些值。 avgprice 的值为 0,avgmiles 的值为 12000。

【问题讨论】:

    标签: c pointers function-pointers


    【解决方案1】:

    你在这里犯了三个错误:

    • 您写的是 =+ 而不是 +=,因此每次都重新分配值而不是添加它。
    • 您使用的是%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;
    }
    

    【讨论】:

    • 如果你对真正古老的 C 结构(1978 年之前)有点好奇,请阅读What does =+ mean in C?
    • 我有点怀疑 2018 年的初学者会故意使用 1976 年“更正”的语言结构。
    • 谢谢,出于某种原因,我一直认为 =+ 是正确的格式。这解决了我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-08-06
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    相关资源
    最近更新 更多