错误:请求成员不是结构或联合

时间:2014-04-19 09:34:06

标签: c pointers structure

我的代码出现问题。我的程序是一个简化分数的程序。所以我的问题是:

我声明了结构Fraction。然后我在我的主函数中声明结构Fraction。

但是当我尝试使用结构分数的任何成员(即f.num,f.den)时,它说它不是结构或联合的成员。我有10个错误,对我的程序都说同样的事情。

错误(逐字):错误:请求成员" num"在一些不是联合结构的东西中

#include <stio.h>

struct Fraction{
    int num;
    int den;
    int lownum;//lownum = lowest numerator.
    int lowden;//lowden = lowest denominator
    int error;
};

void enter(struct Fraction *f);
void simplify(struct Fraction *f);
void display(const struct Fraction *f);


int main(void){
    struct Fraction f;

    printf("Fraction Simplifier\n");
    printf("===================\n");

    enter(&f);
    simplify(&f);
    display(&f);
}

void enter(struct Fraction *f){
    printf("Please enter numerator : \n");
    scanf("%d", &f.num);

    printf("please enter denominator : \n");
    scanf("%d", &f.den);

    printf("%d %d", f.num, f.den);
}

void simplify(struct Fraction *f){
    int a;
    int b;
    int c;
    int negative; //is fraction positive?

    a = f.num;
    b = f.den;

    if (a/b < 0){
        negative = 1;
    }

    if(b == 0){
        f.error = 1;
    }

    if(a < 0){
        a = a * -1;
    }

    if(b < 0){
        b = b * -1;
    }

    //euclids method
    if(a < b){
        c = a;
        a = b;
        b = c;
    }
    while(b != 0){
        c = a % b;
        a = b;
        b = c;
    }

    f.lownum = f.num / a;
    f.lowden = f.den / a;

    if(negative = 1){
        f.lownum = f.lownum * -1;
    }
}

void display (const struct Fraction *f){
    if (f.error != 1){
        printf("%d / %d", f.lownum, f.lowden);
    }else{
        printf("error");    
    }
}

2 个答案:

答案 0 :(得分:6)

void simplify(struct Fraction *f)

f是指向<{1}}的指针。因此,而不是

struct Fraction

你必须写

a = f.num;

可缩短为等效符号:

a = (*f).num;

这同样适用于函数中对a = f->num; 的所有其他引用。

答案 1 :(得分:0)

使用指针(struct Fraction * f)。所以你必须使用 - &gt;访问成员操作者:

f->num