2011-05-16 2 views
1

라이브러리에서 빈 패킹 알고리즘 함수에 액세스하는 프로그램을 작성 중이므로 대학 시절부터 많이 사용하지 않았으므로 C가 녹슬 었습니다. 내가 호출하는 함수는 3 개의 정수 배열을 전달해야한다. 커맨드 라인에서 이걸 부를 겁니다. argv를 사용해야합니까? 아니면 STDIN? 입력 배열은 잠재적으로 각각 50 ~ 100 개의 요소가 될 수 있습니다. 어쨌든 나는 문자열을 파싱하여 배열로 가져와야 할 것이라고 생각합니다. 그렇게 할 수있는 쉬운 방법이 있습니까?정수 배열을 명령 줄에서 입력으로 제공합니다.

답변

4

대용량 배열의 경우, 일반적으로 운영체제의 제한으로 얼마나 많은 인수를 가질 수 있는지 알기 때문에 표준 입력을 사용하고 싶습니다.

또한 입력 형식이 필요합니다. 첫 번째 숫자 n이 첫 번째 배열의 요소 수이고 그 다음에 요소 값이 오는 식입니다. 그럼 나는 다음과 같이 할 것입니다 :

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

int main() 
{ 
    // you need to implement read_number yourself 
    int n = read_number(stdin); 

    // allocate array 
    int *array = (int*) malloc(n*sizeof(int)); 

    // read n numbers into array 
    for (int i=0; i < n; ++i) 
    array[i] = read_number(stdin); 

    // and so on... 
} 

당신은 일반적인 생각을합니다. 너 자신 read_number을 구현하거나 그 방법에 대한 예제를 찾아야한다. 어떻게 든 개별적인 번호를 식별해야합니다. 각 자리수를 다음 공백 문자까지 구문 분석합니다. 그런 다음 공백 문자로 표준 입력의 각 숫자를 구분할 수 있습니다.

예를 들어 아래에 @ypnos 제안 scanf 솔루션을 사용할 수 있습니다.

+1

제한된 인수의 수가 아니라 인수의 길이라고 생각합니다. – GWW

+1

둘 다에 대한 제한이 있습니다. – ypnos

3

해당 요소의 경우 표준 입력을 사용해야합니다. 어쨌든 아무도 손으로 입력하지 않으며 ./program < file만큼 쉽습니다.

구문 분석은 scanf와 큰 차이가 없습니다. 배열을 구성하는 모든 숫자 앞에 요소의 수를 입력해야한다고 정의하십시오. 그런 다음 scanf("%d", &elemcount)을 입력 한 다음 for 루프를 elemcount로 다시 scanf을 사용합니다. 그것의 아름다움은 scanf가 사용자가 요소 수와 다른 수 사이에 넣을 수있는 모든 공백 문자, 개행 문자 등을 처리한다는 것입니다.