2011-03-26 5 views
4

저는 C에서 매우 익숙하며 배열과 함수에 대한 자습서를 보면서 프로젝트를 시작했습니다.C에서 함수 프로토 타입 및 배열로 작업

저는 아래에 표시된 프로그램을 가지고 있습니다. 지금은 사용자가 xt와 y 값을 ctlr로 끝내기를 원합니다. 문제는 아직도 어떻게 관련이 있는지 이해할 수 없습니다. function EnterValues ​​내부 및 외부의 메인(). EnterValues ​​에는 배열이 있습니다.

이 프로그램은 아직 완료되지 않았으므로 완료되지 않았습니다. main() 내부에 아무 것도 없기 때문에 결과는 비어 있습니다. int i, j; int 값;내가 원하는 출력은 다음과 같습니다.void EnterValues ​​(float dataarray [] [MAXDATACOL]).

#include "stdafx.h" 
#include "stdio.h" 

#define MAXDATACOL 5 

int main(void) { 
    void EnterValues(int dataarray[][MAXDATACOL]); 
    int i,j; 
    int values; 
    while(1); 
} 

void EnterValues(float dataarray[][MAXDATACOL]) { 
    for (;;) { 
     int k = 0, g = 0; 
     printf("enter the x and y values terminated by ctrl Z\n"); 
     printf("[%d][%d]:",k++,g++); 
     if (scanf("%f%f",&dataarray[k],&dataarray[g]) == EOF) 
      break; 
    } 
} 
+1

이 코드를 사용하여 수행하려는 작업에 대해 이야기 해 주시겠습니까? –

+0

너무 빨리 가고 있습니까? ** 제안 ** : 별도로 이해할 때까지 2 개의 새로운 주제 (배열 및 기능)를 혼합하지 마십시오. – pmg

+1

두 프로토 타입이 일치하기를 원합니다. 하나는 int를 사용하고 다른 하나는 float을 사용합니다. 나는 당신이 EnterValues의 선언을 반복 할 필요가 없도록 파일의 맨 아래에 main을 두는 경향이있다. –

답변

0

main 앞에 함수 프로토 타입을 작성해야합니다. 당신이 그것을 사용하기 전에

void EnterValues(float dataarray[][MAXDATACOL]);int main(void) 

행운을 빕니다 :)

+0

그게 더 좋은 스타일예요. :) – pmg

1

첫째, 당신은 함수를 선언해야한다. 따라서 EnterValues ​​함수 선언을 주 앞에 입력하십시오. 둘째, 데이터 배열은 "EnterValues"함수에서 검색 할 값입니다.

당신은 당신이 포인터의 개념을 알고 희망

void EnterValues(float **dataarray, int *col_num); 

int main(void) 
{ 
    int i,j; 
    float dataarray[MAXDATACOL][2]; 
    int col_num; 

    EnterValues((float **)&dataarray, &col_num); 
} 

로 코드를 수정해야합니다. 행운을 빕니다!

0

void EnterValues(float dataarray[][MAXDATACOL]);는 매개 변수로 float dataarray[][MAXDATACOL]을 반환 EnterValues라는이 (같은 C 파일에서,이 경우) 어딘가에 선언 된 함수가 발생한 것을 컴파일러에게 사용되는 의미 함수 프로토 타입,이다 아무 것도 반환하지 않으면 (void) 함수 프로토 타입이 함수 내부에서 선언되지 않고 외부에서 선언되므로 함수를 사용하기 전에 선언해야합니다. 그렇지 않으면 컴파일러는이 함수를 호출 할 때 어떤 의미인지 알 수 없습니다.

다른 함수에서 발생하는 함수를 호출 할 때 (이 경우 을 main에서 호출하려는 경우) 수신/반환되는 유형은 언급하지 않습니다. 함수의 선언 (프로토 타입)을 따르고, 적절한 형식의 입력 매개 변수를 제공하고 반환 값을 적절한 형식의 변수에 할당하면됩니다. 예를 들어

: 나는 당신의 코드에서 많은 실수를 참조로

/* This is the prototype of our function multiply */ 
int multiply(int arg1, int arg2); 

/* This is the main function which will use multiply */ 
int main() 
{ 
    int a = 4; 
    int b = 3; 
    int sum; 
    /* here we call the function, we don't write the types it gets, but obeying the prototype */ 
    sum = multiply(a, b); 
    return 0; 
} 

/* This is the implementation of the function multiply */ 
int multiply(int arg1, int arg2) 
{ 
    return arg1 * arg2; 
} 

, 나는이 책 정확하게 새로운 아니지만, 아주 아주 밝은 인 C 프로그래밍 언어을 읽 좋습니다. (this question 참조)