2014-05-20 3 views
1

스티븐 프라 타 (Stephen Prata)가 "C Primer Plus"를 읽는 중입니다. 제 5 장의 제 7 장 프로그래밍 연습 은 "타입 더블 숫자를 요구하고 숫자의 값을 인쇄하는 프로그램을 작성하십시오. 자신의 디자인을 사용하여 값을 큐브하고 인쇄하십시오. 메인() 프로그램은이 함수에 입력 된 값을 전달해야합니다. "C 프로그래밍 연습 : 기능 프로토 타입

내가 뭘 잘못하고 있니? 이 프로그램을 실행할 때 입력 한 번호 만 가져옵니다.

#include <stdio.h> 
void cube(double n); 
int main(void) 
{ 
    double a; 
    printf("Enter a Number: "); 
    scanf("%lf", &a); 
    cube(a); 
    printf("%lf", a); 

    return 0; 
} 

void cube(double n) 
{ 
    n = n * n * n; 
} 
+1

, 그래서'cube'은 당신이 그것을 전달하는 값의 로컬 복사본을 수정합니다 코드는 다음과 같이해야합니다 귀하의 조언에 따라

. – Michael

+1

이 모든 대답은 잘못되었습니다. 연습은 "가치를 정육화하고 그것을 인쇄 *하기 위해 자신의 설계 기능을 사용하는 것"(강조 광산)입니다. 'main() '이 아니라 함수 내부에서 값을 출력하기를 원한다. 그래서 값을 반환하거나 포인터를 전달하는 것에 대한 이러한 모든 고려 사항은 오프 포인트이다. –

답변

2

당신은 반환 값을 필요로한다!

#include <stdio.h> 
double cube(double n); 
int main(void) 
{ 
    double a; 
    printf("Enter a Number: "); 
    scanf("%lf", &a); 
    printf("%lf", cube(a)); 

    return 0; 
} 

double cube(double n) 
{ 
    n = n * n * n; 
    return n; 

} 

그런 다음 값을 반환하지 않을 경우 사용할 수있는 포인터

#include<stdio.h> 
void cube(double *n) 
{ 
    *n = (*n) * (*n) * (*n); 
} 
int main() 
{ 
    double n = 10; 
    cube(&n); 
    printf("%lf\n",n); 
} 
+0

왜 downvote? – Nullpointer

+0

젠장, 내 정확한 해결책이 있지만'int' 대신'double'을 사용했습니다. – aglasser

+1

@aglasser 죄송합니다. 보스! 나는 경험이있다! : p;) – Nullpointer

1

함수 반환 결과, 예를 들어,에 cube 요구

#include <stdio.h> 

double cube(double n); 

int main(void) 
{ 
    double a, b; 

    printf("Enter a Number: "); 
    scanf("%lf", &a); 
    b = cube(a);  // call `cube()` to get cube of a and save in b 
    printf("%lf", b); 

    return 0; 
} 

double cube(double n) 
{ 
    return n * n * n; // return n cubed as function result 
} 
+1

그런 질문에 답해야합니까? –

+0

@Cool_Coder : 물론, 왜 안 되니? –

0

사용자의 기능 cube()a에 할당 된 값을 큐브 처리하지만 결과는 을 반환하지 않습니다.

이것은 다시 변수 a이 변경되지 않았 음을 의미합니다.

당신은 다음과 같이 큐브 기능을 사용 할 수 있도록 함수 프로토 타입을 변경해야합니다

a = cube(a); 

이것은 a 함수에 의해 반환되는 결과로 업데이트됩니다 것을 의미합니다 cube()

0

다른 답변에서 언급했듯이 cube 함수는 값을 반환해야합니다. 반환 유형을 void으로 유지할 수 있지만 포인터에서 n으로 전달하면 반환 유형을 유지할 수 있습니다. 가독성을위한 괄호.

void cube(int *n) 
{ 
    // dereference the pointer and cube it 
    *n = (*n) * (*n) * (*n); 
} 

int main() 
{ 
    int n = 3; 
    cube(&n); // address of n variable 
    printf("%d\n", n); 
    return 0; 
} 

출력

0

(27) 대신 a의 값을 전달, 당신은 메인에서 a의 주소를 전달할 수있다().

#include <stdio.h> 
void cube(double n); 
int main(void) 
{ 
    double a; 
    printf("Enter a Number: "); 
    scanf("%lf", &a); 
    cube(&a); 
    printf("%lf", a); 

    return 0; 
} 

그런 다음 큐브(), 포인터 n이 가리키는 것을 수정합니다.

void cube(double *n) 
{ 
    *n = (*n) * (*n) * (*n); 
} 
0

신중하게 질문을 읽어 주신 Paul Griffiths에게 감사드립니다.당신은 _by의 VALUE_을 전달하는

#include <stdio.h> 
void cube(double n); 
int main(void) 
{ 
    double a; 
    printf("Enter a Number: "); 
    scanf("%lf", &a); 
    cube(a); 

    return 0; 
} 

void cube(double n) 
{ 
    n = n * n * n; 
    printf("%lf", n); 
}