2010-03-22 3 views
4

나는 숙제 지정으로 올바른 방향으로 밀고 싶습니다. 여기서 질문 :참조 기능으로 호출

1 공극 반환 C 함수 호출을 기록 입력이 기능은 더블 정밀도 값 하였다 개의 정수의 사용자에게 입력을 요구. 이 함수는 키보드에서 값을 읽어 들이고 은 두 개의 정수가 입력 된 을 찾습니다. 함수는 참조에 의한 호출을 사용하여 읽은 세 값 의 값을 전달하고 제품 을 주 프로그램에 다시 전달합니다. 그러면 주 프로그램은 세 값을 읽고 제품은 을 계산하여 인쇄합니다. 입력 에 대한 테스트 결과를 제공하십시오 : 3 5 23.5. 프로그램에 배열 또는 전역 변수를 사용하지 마십시오.

그리고 여기 내 코드입니다 : 난 정말 포인터 변수를 참조하는 방법을 알아낼 수 없습니다

#include <stdio.h> 
#include <stdlib.h> 

void input(int *day, int *month, double *k, double *pro); 

int main(void){ 
    int i,j; 
    double k, pro; 


    input(&i, &j, &k, &pro); 
    printf("%f\n", pro); 
    return 0; 
} 

void input(int *i, int *j, double *k, double *pro){ 

    int x,y; 
    double z; 
    double product; 

    scanf("%d", &x); 
    scanf("%d", &y); 
    scanf("%f", &z); 


    *pro += (x * y * z); 

} 

, 그냥 날 위해 작동하지 않습니다.

도움이 될 것입니다.

답변

1

input 기능의 숫자를 읽을 때 당신은으로 main 함수에서 선언 된 변수 i, jk에 직접 값을 읽을 수있는 포인터 iptr, jptr, kptrproptr를 사용할 수있다 :

void input(int *iptr, int *jptr, double *kptr, double *proptr){ 

    scanf("%d", iptr); // read directly into i using pointer to i. 
    scanf("%d", jptr); 
    scanf("%f", kptr); 

    *proptr = ((*iptr) * (*jptr)); // compute product and assign to pro. 
} 
+0

는 나, 아니면 질문에 읽은 double 값으로 아무것도 할 날을 지정하지 않았다? – Chad

+0

@Chad, 오직 그것을 읽고 메인에 인쇄하십시오. –

+0

@Chad : 내가 질문에서 얻은 것. – codaddict

0

프로그램에서 수행하지 않는 작업은 입력 값을 i, j 및 k로 설정하는 것입니다.

x, y 및 z 대신에 매개 변수를 사용하십시오. 당신은 거의 다, 대신에 새로운 변수 x, yz을 만드는, 포인터를 사용

2

당신은 통과 :

scanf("%d", i); 
scanf("%d", j); 
scanf("%f", k); 

*pro += ((*i) * (*j) * (*k)); 
+0

왜'+ ='입니까? double이 초기화되지 않았으므로 쓰레기가 될 가능성이 있습니다. – dreamlax

+0

글쎄 그것은 그의 코드에 그랬다. – rlbond

1
*pro += (x * y * z); 

이 끔찍하게 휴식 것입니다. 당신은 사전에 어떤 쓰레기가 있건간에 제품을 추가하고 있습니다. 당신은 다시 떨어져 pro에서 +, 즉 :

*pro = (x * y * z); 
3

당신은 pro에 추가하지만이 초기화되지 않습니다, 당신은 통과되지 않은 값을 제거 할. 이 경우 전달 된 변수의 주소에 값을 저장합니다.이 경우 값을 액세스/검색하기 위해 포인터를 역 참조해야하고 *i 메서드에서 전달 된 주소를 직접 사용하면 다시 주소를 가져올 필요가 없습니다.

이 작품은 - doublefloat으로 바꿨습니다.:

#include <stdio.h> 
#include <stdlib.h> 

void input(int *day, int *month, float *k, float *pro); 

int main(void){ 
    int i,j; 
    float k, pro; 

    i = j = k = pro = 0; 

    input(&i, &j, &k, &pro); 
    printf("%f\n", pro); 
    printf("%d : %d : %f\n", i,j,k); 
    return 0; 
} 

void input(int *i, int *j, float *k, float *pro){ 

    scanf("%d", i); 
    scanf("%d", j); 
    scanf("%f", k); 

    printf("%d - %d - %f\n", *i,*j,*k); 

    *pro += (*i * *j * *k); 
} 

출력 :

1 
2 
3.5 
1 - 2 - 3.500000 
7.000000 
1 : 2 : 3.500000 
관련 문제