2014-10-21 2 views
0

계산기의 '%'(모듈러스) 함수에 대한 사례를 작성해야합니다. 컴파일 할 때 fmod 기능을 잘못 사용했다고합니다. '%'대/소문자를 사용하지 않으면 나머지 코드가 올바르게 작동합니다.계산기와 C의 부동 소수점 모듈러스 함수

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <math.h> // Originally missing 

#define MAXOP 100 
#define NUMBER '0' 

int getop(char []); 
void push(double); 
double pop(void); 

main() 
{ 
    int type; 
    double op2; 
    char s[MAXOP]; 

    printf("\nEnter numbers below in the following format\nwith a space between each:\n"); 
    printf("\tnum1 num2 operator\n"); 
    printf("\tyou may use (+, -, /, *) for the operators\n"); 

    while((type = getop(s)) != EOF) 
    { 
     switch(type) 
     { 
      case NUMBER: 
       push(atof(s)); 
       break; 

      case '+': 
       push(pop() + pop()); 
       break; 

      case '*': 
       push(pop() * pop()); 
       break; 

      case '-': 
       op2 = pop(); 
       push(pop() - op2); 
       break; 

      case '/': 
       op2 = pop(); 
       if(op2 != 0.0) 
        push(pop()/op2); 
       else 
        printf("error: zero divisor\n"); 
       break; 

       case '%': 
       op2=pop(); 
       if(op2 != 0.0) 
        push(fmod(pop(),op2)); 
       else 
        printf("error: zero divisor"); 
       break; 

      case '\n': 
       printf("\t%.8g\n", pop()); 
       break; 
      default: 
       printf("error: unknown command %s\n", s); 
       break; 
     } 
    } 
    return 0; 
} 

은 내가 fmod 기능을보고, 그것이 작동하지 않습니다 난 아직도 왜 알아낼 수 없습니다. 이견있는 사람?

가 나는 math.h 헤더를 추가하고, 내가 지금 무엇입니까 오류 메시지는 다음과 같습니다 당신은 #include <math.h> 누락

/tmp/ccgiVhWI.o: In function `main': 
calc.c:(.text+0x14f): undefined reference to `fmod' 
collect2: ld returned 1 exit status 
+0

모듈러스 연산자 (%)를 사용하지 않는 이유는 무엇입니까? –

+2

@KevinMangold :'% '의 피연산자는 모두 정수 여야하지만 부동 소수점 숫자를 다루고 있기 때문입니다. –

+0

'백분율 함수'는 특히 정확한 설명이 아닙니다. 모듈러스 함수입니다. –

답변

2

그래서 컴파일러는 fmod()int를 반환하는 기능입니다 생각, 또는 그것을 불평한다 fmod()에 대해 알고 있지만 제대로 선언하지 않았습니다.

정확한 컴파일러 오류 메시지를 포함하는 것이 좋습니다 (파일 이름이 매우 긴 경우가 아니면 파일 이름을 잘림).

2

fmod의 프로토 타입을 제공하기 위해 math.h 헤더가 누락되었습니다.

+0

다음과 같이 math.h 헤더를 추가했는데 현재 : calc.c :(. 텍스트 + 0x14f) : fmod에 대한 정의되지 않은 참조 collect2 : ld가 1 종료 상태를 반환했습니다. – minenerd

+1

@minenerd 명령에'-lm ' 라인을 명시 적으로 수학 라이브러리와 연결합니다. – ooga

관련 문제