2012-03-09 1 views
2

제목이 여전히 모호하면 죄송합니다.수정 된 배열 값을 C의 기본 함수로 다시 전달

저는 학교에서이 과제를하고 있습니다. 정의 된 함수 프로토 타입, main 함수 및 change_array 함수는 다음과 같습니다.

이 프로그램의 전반적인 목적은 사용자가 5 개의 다른 숫자를 입력하고 배열에 저장할 수있게하는 것입니다. 그런 다음 change_array 함수가 수행하는 작업은 10보다 작은 숫자를 두 배 (곱하기 2)하는 것이지만 현재 의도 한대로 수행하지 않습니다. 나는 정말로 붙어있어, 누군가 내 실수를 지적 할 수 있는지 궁금해하고 있었다. 정확한 대답을 요구하는 것이 아니며 포인터와 지침이 필요합니다.

잘못된 점은 change_array 함수가 사용자가 제공 한 값을 변경하지 않는다는 것입니다. 예를 들어 사용자가 "3, 5, 6, 12, 32"를 입력하면 내 프로그램의 출력은 여전히 ​​"3, 5, 6, 12, 32"입니다. 하지만 실제로 원하는 것은 배열이 change_array 함수에서 다시 전달 된 후에 "6, 10, 12, 12, 32"입니다.

는 완전한 프로그램으로 편집 :

#include <stdio.h> 
#define SIZE 5 
void fill_array(double x[], int s); 
void change_array(double x[], int s); 
void print_array(double x[], int s); 

main() 
{ 
    double x[SIZE]; 

    fill_array(x, SIZE); 
    printf("The array is as: \n"); 
    print_array(x, SIZE); 
    change_array(x, SIZE); 
    printf("After change, the array is: \n"); 
    print_array(x, SIZE); 
} 

void fill_array(double x[], int s) 
{ 
    int i=0; 

    printf("Please input 5 Non-Negative double numbers\n"); 
    for (i=0; i<s; i++) { 
     printf("Number %d: ", i+1); 
     scanf("%d", &x[i]); 
     printf("\n"); 
    } 
} 

void change_array(double x[], int s) 
{ 
    int i=0; 

    for (i=0; i<s; i++) { 
     if (x[i] < 10) { 
       (x[i] = (x[i] * 2)); 
     } 
    } 
} 

void print_array(double x[], int s) 
{ 
    int i=0; 

    for (i=0; i<s; i++) { 
     printf("%ld \t", x[i]); 
    } 
    printf("\n"); 
} 

내 코드가 C.

+0

'change_array'는 호출자가 수정할 수 있도록 실제로 배열을 수정합니다. 실제 코드, 가급적 완전한 프로그램을 게시해야합니다. –

+0

방금 ​​게시했습니다. 감사합니다. –

+0

새 코드는 문제가 단순히 printf 형식 문자열임을 분명히합니다. –

답변

1

change_array 아무 문제가 없습니다. 실제로 호출자 배열의 값을 수정합니다.

문제는 인쇄 기능인 print_array입니다. printf에 잘못된 형식 문자열을 사용하고 있습니다. 부동 소수점 값이고 정수가 아니기 때문에 %ld 대신 %f을 사용해야합니다.

+0

대단히 감사합니다! –

+0

이 답변으로 문제가 해결되면 승인 된 것으로 표시하십시오. –

2

배열은 항상 참조로 전달에 기록 된, 즉 문제가되지 않도록. 인쇄 기능과 추가 끝 중괄호를 추가하면 예상대로 작동합니다. 코드를 실행할 수 있도록 최소한의 작업 예제 (MWE)를 제공 할 수 있습니까? (나는이 아마 코멘트해야 알아,하지만 내가 언급 할 수있는 3 점 수줍어 해요) 나는 당신의 최소한의 샘플에서 만드는 코드와 코드 works fine for me 수정

+0

당신과 Als가 모두 작동한다고 승인했기 때문에 그것이 원치 않는 결과를 초래하는 다른 기능이 될 수도 있습니다. 나는 나의 일을 밀접하게 다시 보려고 노력할 것이다. –

1

:

#include <stdio.h> 
    #define SIZE 5 
    void change_array(double x[], int s); 


    int main() 
    { 
     double x[SIZE] = {3, 5, 6, 12, 32}; 
     printf("The array is as: \n"); 
     for(int i = 0;i<SIZE;i++) 
      printf("\n%f",x[i]); 

     //fill_array(x, SIZE); 

     //print_array(x, SIZE); 
     change_array(x, SIZE); 
     printf("After change, the array is: \n"); 
     for(int i = 0;i<SIZE;i++) 
      printf("\n%f",x[i]); 
     // print_array(x, SIZE); 
     return 0; 
    } 


    void change_array(double x[], int s) 
    { 
     int i=0; 

     for (i=0; i<s; i++) 
     { 
      if (x[i] < 10) 
      { 
       (x[i] = (x[i] * 2)); 
      } 
     } 
    } 

3.000000 
5.000000 
6.000000 
12.000000 
32.000000 
0,123,516 :

어레이는 같다 : 여기

가 출력되고

변화 후, 배열은 다음과 같습니다

6.000000 
10.000000 
12.000000 
12.000000 
32.000000 
+0

TSouthwick에게 말씀 드렸듯이 원치 않는 결과를 초래하는 다른 기능이 있다고 생각합니다. 나는 나의 일을 밀접하게 다시 보려고 노력할 것이다. –

+0

방금 ​​내 전체 프로그램을 게시했습니다. –

관련 문제