2017-11-13 11 views
-2

나는 문제가있어 트릭을 할 수있는 적절한 대답을 찾을 수없는 것 같다. 그래서이 정적 배열 arr [some_number]이 있고 그 배열을 가진 메뉴를 갖고 싶다. 물론 옵션 중 1 개는 배열을 채우는 것입니다. 모든 것은 별개의 기능을 수행해야합니다. 여기에 최초의 하나입니다`배열 크기를 다른 함수에 전달하는 방법은 무엇입니까?

void fill_array(int arr[], const int size) { 
int n; 
cin >> n; 
for (int i = 0; i < n; i++) { 
    cin >> arr[i]; 
} 
} 

`

가 OBV, 그 배열에 대해 원하는 얼마나 많은 요소가 사용자 입력을 할 수있는 옵션이 있어야합니다. n < some_number이 경우 ...하지만 내 질문이 온다 :이 특정 경우에는 다른 변수에 n 변수를 전달할 수 있으므로 배열의 const 크기가 아닌 사용자 입력 요소의 수를 알 수 있습니다. 미리 감사드립니다.

+1

는 C++ 솔루션은'표준 : vector'을 사용하는 것입니다. 필요에 따라 확장 및 축소가 가능하며 자체 크기를 알고 있습니다. –

+0

@rllstpwz C++은 가변 길이 배열을 지원하지 않습니다. 표준 컨테이너 std :: vector를 사용해야합니다. –

+0

나는 벡터를 사용하지 않아야한다. – rllstpwz

답변

0

가장 좋은 방법은 책임을 분리하는 것입니다. fill_array()과 같은 함수는 배열 크기에 대해 사용자에게 전혀 묻지 않습니다. 예를 들어, 필요에 따라 기능에 입력 한 크기를 통과 한 후

void fill_array(int arr[], const int size) 
{ 
    for (int i = 0; i < size; i++) 
     cin >> arr[i]; 
} 

프롬프트 사용자 사전과 : 그것은 이미 크기 값은 그대로 그 값을 사용하여 입력으로 전달되고있다

int ask_user_for_size(int max_number) 
{ 
    int n; 
    do 
    { 
     cout << "Enter a number between 1 - " << max_number << ": "; 
     cin >> n; 
     if ((n > 0) && (n <= max_number)) break; 
     cout << "Invalid number, try again" << endl; 
    } 
    while (true); 
    return n; 
} 

void fill_array(int arr[], const int size) 
{ 
    for (int i = 0; i < size; i++) 
     cin >> arr[i]; 
} 

void output_array(const int arr[], const int size) 
{ 
    for (int i = 0; i < size; i++) 
     cout << arr[i]; 
} 

... 

int arr[some_number]; 
int n = ask_user_for_size(some_number);  
cout << "Enter " << n << " numbers: "; 
fill_array(arr, n); 
output_array(arr, n); 
또한

: 대부분의 배열 문제에

int ask_user_for_size() 
{ 
    int n; 
    do 
    { 
      cout << "Enter a number greater than 0: "; 
      cin >> n; 
      if (n > 0) break; 
      cout << "Invalid number, try again" << endl; 
    } 
    while (true); 
    return n; 
} 

void fill_array(int *arr, const int size) 
{ 
    for (int i = 0; i < size; i++) 
     cin >> arr[i]; 
} 

void output_array(const int *arr, const int size) 
{ 
    for (int i = 0; i < size; i++) 
     cout << arr[i]; 
} 

... 

int n = ask_user_for_size(); 
int *arr = new int[n]; 
cout << "Enter " << n << " numbers: "; 
fill_array(arr, n); 
output_array(arr, n); 
delete[] arr; 
+0

답장을 보내 주셔서 감사합니다. 내 질문을 통해 나는 꽤 잘 내 문제를 지정하지 생각 : 정적 배열 및 포인터를 사용해야합니다. 또한 2 가지 기능이 있다고 말할 수 있습니다. 첫 번째로 입력해야 할 요소의 양을 입력해야하며, 두 번째로는 그 요소를 출력하고 싶습니다만, 모든 요소에 값이있는 경우 전체 배열 크기를 통해 문자를 읽지 않을 때 무작위로 출력합니다 5 자리 또는 6 자리 숫자. – rllstpwz

+0

이 때문에 나는 요소의 수를 다른 함수에 전달하고자한다. 그래서 나는 처음부터 배열의 전체 const 크기가 아닌, 그것만을 통해 글자를 읽을 수있다. – rllstpwz

+0

답변을 업데이트했습니다. –