2014-12-20 2 views
1

할당에는 3 개의 기능이 필요합니다. 사용자는 10을 입력 할 때까지 숫자 0-9를 입력하고 입력을 중지하고 각 숫자를 센 다음 각 숫자의 개수를 계산합니다. 사용자가 숫자를 입력 한 경우에만 출력해야합니다.초심자 배열, C++에 대한 문제

내 유일한 문제는 사용자가 사용하지 않는 배열의 모든 요소에 대해 Xcode는이를 0으로 계산하므로 최종 출력의 수가 0이 비정상적으로 많습니다. 다른 모든 것은 잘 작동합니다.

여기에 당신이 "0으로 [보내고] 엑스 코드 수"로 언급하고하는 것은 실제로 단지 초기화되지 않은 값이다

#include <iostream> 
using namespace std; 

// counter function prototype 
void count(int[], int, int []); 
// print function prototype 
void print(int []); 

int main() 
{ 
    // define variables and initialize arrays 
    const int SIZE=100; 
    int numbers[SIZE], counter[10], input; 

    // for loop to set all counter elements to 0 
    for (int assign = 0; assign < 10; assign++) 
    { 
     counter[assign]=0; 
    } 

    // for loop to collect data 
    for (int index=0 ; input != 10 ; index++) 
    { 
     cout << "Enter a number 0-9, or 10 to terminate: "; 
     cin >> input; 

     // while loop to ensure input is 0-10 
     while (input < 0 || input > 10) 
     { 
      cout << "Invalid, please enter 0-9 or 10 to terminate: "; 
      cin >> input; 
     } 

     // if statements to sort input 
     if (input >= 0 && input <=9) 
     { 
      numbers[index] = input; 
     } 
    } 

    // call count function 
    count(numbers, SIZE, counter); 
    // call print function 
    print(counter); 

    return 0; 
} 

// counter function 
void count(int numbers[], int SIZE, int counter[]) 
{ 
    // for loop of counter 
    for (int index = 0 ; index < 10 ; index++) 
    { 
     // for loop of numbers 
     for (int tracker=0 ; tracker < SIZE ; tracker++) 
     { 
      // if statement to count each number 
      if (index == numbers[tracker]) 
      { 
       counter[index]++; 
      } 
     } 

    } 
    return; 
} 

// print function 
void print(int counter[]) 
{ 
    // for loop to print each element 
    for (int index=0 ; index < 10 ; index++) 
    { 
     // if statement to only print numbers that were entered 
     if (counter[index] > 0) 
     { 
      cout << "You entered " << counter[index] << ", " << index << "(s)" << endl; 
     } 
    } 
    return; 
} 
+4

@nbro, C++는 훌륭한 시작 언어입니다. – David

+0

지식이 풍부한 선생님이 계시다면, OP는 분명히 그렇지 않습니다. 그는 또한 선택의 여지가 없을 것입니다. – Puppy

+0

@David 그건 당신 의견입니다. – nbro

답변

2

내 코드입니다. 사용자의 입력을 0-9로 제한하기로 결정한 경우,이 딜레마를 해결하는 쉬운 방법은 배열의 크기를 결정한 직후 배열을 반복하고 각 값을 -1로 설정하는 것입니다. 이 많은의 유스 케이스의 종류이다

if (counter[index] != -1) 
{ 
    cout << "You entered " << counter[index] << ", " << index << "(s)" << endl; 
} 

참고 : 사용자가 입력 대신 cout의 모든 단일 값을 보내고을 완료하면

그 후, 단지 다음과 같이 조건부로 인쇄 연결된 목록 또는 벡터와 같은 것에 더 적합합니다. 그대로, 배열의 크기를 조정하거나 오버플로를 방지하기 위해 아무 것도하지 않으므로 사용자가 100 개 이상의 숫자를 입력하려고하면 심각한 문제가 발생합니다.

1

먼저이 질문은 정확한 질문에 대한 답변이 아니라 훨씬 간단한 형식으로 코드를 작성하는 방법에 대한 제안입니다.

저는 이것을 과제로 쓰지 않고 아주 간단합니다. 코딩에 관한 한 당신이 일에 좋은 처리를하는 것처럼 보입니다.

이를 고려

당신은 사용자가 0-10을 입력 할 수 있도록, 모든 0-9의 수를 계산해야합니다. 배열에는 인덱스가 있고 배열 10의 정수는 인덱스로 계산하는 10 개의 숫자를 보유합니다. 이제 공짜로 들어있는 빈 int을 가지고 있으므로 셀 수없이 사용해보십시오.

코드 힌트 :

++numbers[input]; 

두 번째 힌트 : 제로로 모든 것을 초기화하는 것을 잊지 마십시오.

+0

다른 힌트가있을 수 있습니까? 이것은 내 최초의 컴퓨터 과학 과정 이었기 때문에 내 프로그래밍 근육이 여전히 강하지는 않았습니다 (힌트를 사용하기에 충분합니다). – republikunt

+0

물론입니다. 우선 내가 어디에서/어디서 힌트를 잃었는지 이해하도록 도와주세요. – David