2014-04-19 1 views
0

내 코드에 문제가 있습니다. 내 프로그램은 분수를 단순화하는 프로그램입니다. 그래서 내 문제는 다음과 같습니다.오류 : 구조 또는 조합이 아닌 무언가의 회원 요청

Fraction 구조체를 선언합니다. 그리고 나서 필자는 주요 함수에서 F를 선언합니다.

그러나 구조체 소수 (즉, f.num, f.den)의 멤버를 사용하려고하면 구조체 또는 공용체의 멤버가 아니라고 표시됩니다. 내 프로그램에 대해 모두 똑같은 말을하는 것과 같은 10 가지 오류가 있습니다.

오류 (그대로) : 오류 :

void simplify(struct Fraction *f) 

f에서 무언가가 아니다 노조

#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");  
    } 
} 
+0

''입니다. 더 나은 들여 쓰기를 사용해보십시오. – pmg

+0

팁 : C 규칙에서 비 오류 오류 코드는 0뿐입니다. 오류 코드와 비 오류를 모두 반환하는 함수는 0 (포인터 용), 모든 음수 값 (음수가 아닌 값을 반환하는 함수 용) 또는 다른 것이 가능하지 않으면 명시 적으로 성공하지 못하거나 errno가 지원하는 특정 반환 값. 진리 값의 경우 협약은 0은 거짓이고 다른 모든 것은 사실이라고 규정하고 있습니다. – Deduplicator

답변

7

의 구조에서 멤버 "NUM"에 대한 요청은 struct Fraction포인터입니다. 당신의 기능에 struct Fraction *f

a = f->num; 

같은 다른 모든 참조에 적용 따라서, 대신

a = f.num; 

의 경우에 해당하는 표기로 단축 할 수

a = (*f).num; 

를 작성해야 .

+0

'Fraction'은'typedef' 인스턴스가 아닌'typedef struct Fraction Fraction'과'Fraction ** f'가있는 경우 어떻게해야합니까? 나는 ** f-> num을 할 수 없다고 확인했다. 동일한 오류가 발생합니다. 'typedef' 인스턴스에서 멤버에 액세스하기 위해'struct'를 다시 얻을 수있는 방법이 있습니까? – Mahesha999

0

포인터 (Fraction * f 구조체)를 사용합니다. 따라서 -> 연산자를 사용하여 멤버에 액세스해야합니다.

f->num