2016-11-24 2 views
0

숫자 배열을 읽고 중복 숫자 만 표시하는 프로그램을 만들고 있습니다. 그러나, 내 코드가 이상하게 동작하고 잘못된 출력을 출력합니다 (끝에 첨부 된 출력).숫자 배열에 중복 숫자 표시

#include <iostream> 
using namespace std; 
const int MAX_NUMBER_ELEMENTS = 20; 

void fillArray (int a[], int size, int& numberUsed); 
void deleteRepeats (const int a[], int numberUsed, int n); 

int main() 
{ 
    int array [MAX_NUMBER_ELEMENTS], numberUsed; 

    cout << "This program reads in an array and scans for duplicate elements. " << endl; 
    cout << "Enter the array: \n"; 

    fillArray(array, MAX_NUMBER_ELEMENTS, numberUsed); 
    deleteRepeats(array, numberUsed, 20); 
} 

void deleteRepeats (const int array[], int numberUsed, int n) 
{ 
    int i, j; 

    for (i = 0; i < n; i++) 
    { 
     for (j = i + 1; j < n; j++) 
     { 
      if (array[i] == array[j]) 
       cout << "The duplicate " << array[i] << " was found. "; 
     } 
    } 
} 

void fillArray (int a[], int size, int& numberUsed) 
{ 
    cout << "Enter up to " << size << " nonnegative whole numbers.\n" 
     << "Mark the end of thae list with a negative number.\n"; 
    int next, index = 0; 
    cin >> next; 
    while ((next >= 0) && (index < size)) 
    { 
     a[index] = next; 
     index++; 
     cin >> next; 
    } 

    numberUsed = index; 
} 

내 입력 :

This program reads in an array and scans for duplicate elements. 
Enter the array: 
Enter up to 20 nonnegative whole numbers. 
Mark the end of the list with a negative number. 
1 1 3 5 -1 

가 내 출력

을 :

중복 하나가 발견 된이 지금까지 내 코드입니다. 중복 1이 발견되었습니다. 중복 1이 발견되었습니다. 중복 1이 발견되었습니다. 중복 1이 발견되었습니다. 중복 1이 발견되었습니다. 중복 1이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 1이 발견되었습니다. 중복 1이 발견되었습니다. 중복 1이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다. 중복 0이 발견되었습니다.

출력 에서처럼 중복 된 숫자가 표시되지 않습니다. 나는 그것을 디버깅하는 방법을 모르지만 그것은 루프와 관련이 있다고 생각한다. 누구나 내가 왜 숫자를 읽어들이는 배열에 중복 된 요소를 표시하는 코드가 아니라는 것을 깨달을 수 있습니까? 어떤 도움을 주셔서 감사합니다. 감사!

+0

당신이 두 개의 매개 변수를 어떻게 통과 할 초기화되지 않은 메모리에 경계 나갈 수 있기 때문에 단지 (i,j) < numberUsed를 사용은 위험하다 ('numberUsed'와'n') deleteRepeats''에? 'numberUsed'가 충분하지 않습니까? (5 요소 배열에 대해 20 개의 메시지를 표시하는 것은 분명히 피할 것입니다). 또한 당신의 함수는 이상한 이름을 가지고 있습니다 : 이름은'deleteRepeats'이지만 실제로 아무 것도 삭제하지 않습니다 ... –

답변

0

루프는 배열 (그래서 20) IOF 최대 끝날 때까지, 당신의 배열이 제로로 초기화 것 같다 그래서 당신의 입력

1 1 3 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

모두 제로 뒤에 모든 0 보고서로 변환 실행 - > 여기


... 루프가 MAX_NUMBER_ELEMENTS하지 numberUsed로 이동해야하고, 가능한 보정 표시되는 출력을 먹으 렴 (테스트되지 않은,하지만 아이디어는 명확해야한다) :

0 123,127,

부록 : 당신이

+0

Lit! 그게 내 문제를 해결해 줬어. –

+0

참고 : 'deleteRepeats'에는 두 가지 크기를 전달할 필요가 없으며,'numberUsed'는 'n'보다 커서는 안됩니다. 그렇지 않으면 채울 때 배열에없는 메모리 전체에 이미 글씨가 쓰여져 있기 때문입니다. –