2012-03-20 3 views
3

나는 이것을 몇 시간 동안 인터넷으로 검색했지만 행운은 없습니다.반송 전 정답, 반송 후 부정확

나는 아주 간단한 방법을 호출하고 올바른 값을 반환하는 표준 C를 사용하고 있지만 반환 후에는 값이 완전히 잘못되었습니다.

전화 :

 //declare the gross and ficaTax variables 
    double gross; 
    double ficaTax; 

    //calculate the gross and the ficaTax 
    gross = calcGross(payRate, hours); printf("%f\n", gross); //DELETE 

방법 : 나는에 시도하고 그것을 해결하는 방법 밖으로 값을 인쇄하고있어,하지만 난 그것을 알아낼 수 없습니다

double calcGross(double rate, double hours){ 

    double gross; 

    //if the person didn't work more than 40 hours 
    if(hours <= 40.0){ 
      gross = hours * rate; 
    } 

    //if the person did work more than 40 hours 
    else{ 
      gross = 40.0 * rate + ((hours - 40.0) * rate * 1.5); 
    } 

    printf("%f \t", gross); 
    return gross; 
} 

. 여기서, 출력 :

(올바른) (부정확 한 후 리턴)

529.600000, -858993459.000000

1371.522500, 171798692.000000

100.000000, 0.000000

1515.710000는 171798692.000000

977.255000, 1030792150.000000

5631.360000, 687194767.000000

7502.400000, 1717986918.000000

4335.106000, 584115553.000000

1924.181500, -618475291.000000

683.084000, 137438953.000000

1348.424000, 755914245.000000

1369.200000 -85 8993460.000000

529.600000, -858993459.000000

4441.522500, -1030792152.000000

100.000000, 0.000000

1882.710000,

내 유일한 추측 171798692.000000했다 하나 내 더블 포스트 반환에 너무 오래했다 더블의 길이에 맞았지만, 더블 프리 - 리턴에 그것을 저장하고 정확하게 프린트했다. 이 경우 나는 그것을 고치는 법을 알 수 없었다. 내 다른 추측은 내가 잘못된 포스트 - 리턴 (post-return)을 프린트하고 있지만, 같은 방식으로 프린트 중이다.

저는 Linux를 사용하고 있고 gcc 컴파일러가 중요합니다. 어떤 도움을 주시면 감사하겠습니다. 나는이 겉으로는 간단한 문제를 몇 시간 동안 고치려고 노력해왔다.

+0

컴파일러에서 경고를 발행합니까? 호출하기 전에 함수의 프로토 타입을 제공 했습니까? – FatalError

+0

코드를 사용하는 것과 정확히 똑같은 코드를 제공하고 있습니까? 출력하고있는 변수 이름을 잘못 입력하거나 함수 호출과 printf() 사이에 새로운'gross'를 선언 할 가능성은 없습니다. –

+0

더블을 인쇄하려면 % lf를 시도하십시오. – John3136

답변

4

첫 번째 예제에서 호출되기 전에 calcgross() 함수에 대한 선언 또는 프로토 타입을 제공하지 않은 것이 문제입니다.

함수에 대한 선언/프로토 타입을 보지 못한 채로 C 컴파일러는 double이 아니라 int을 반환한다고 가정하므로 모든 것이 잘못되었습니다.

장소 당신은 (이상적으로 포함 헤더에) 함수를 호출하기 전에 어딘가에 다음 행

test.c:73:5: warning: implicit declaration of function 'calcGross' [-Wimplicit-function-declaration] 
:

double calcGross(double rate, double hours); 

당신에게 이것에 대해 다음과 같은 경고를 줄 것 -Wall 컴파일러 옵션을 사용하여

+0

감사합니다. 나는 컴파일 스크립트에 Wall을 추가 할 것이다. – user1279914

-1

어리 석고 미묘한 오류."printf ("% lf ", gross)"를 사용하면 문제가 없어 질 것입니다.

+1

'% f'는'printf()'에 대해서'% lf'와 같아야합니다. 왜냐하면'float'은 varargs리스트에 나타날 때'double'으로 승격되기 때문입니다. 'scanf()'는 포인터를 전달하기 때문에 중요합니다. – FatalError

+1

나는 그것을 의심한다. C는 가변 인수를 취하는 함수에 대해 float을 double 형으로 승격시킵니다. printf ("% f")는 올바르게 출력되는 첫 번째 값에 의해 뒷받침되는대로 잘 작동해야합니다. –

+1

% f가 맞습니다. : D – madper

4

가장 많이 발생하는 문제는 사용하기 전에 calcGross을 선언하지 않았기 때문입니다. 컴파일러는 기본 반환 유형 (int)을 사용합니다. 사용하기 전에 calcGross() 정의를 삽입 해보십시오.

+0

정확함; 그에 따라 내 주장을 편집했습니다. 감사! –