2016-12-23 1 views
-4

그래서 중복을 피하기 위해 역순으로 배열을 인쇄해야합니다. 코드가 하나의 실수를 제외하고 잘 작동 : 출력되어야한다 :인쇄 배열 반대 순서로 중복 피하기 C++

100000 
9995 
992 
22 
14 

그것은 첫 번째 쓰레기 값에서 온 한 화면

-292742 
100000 
9995 
992 
22 
14 

에 인쇄, 나는 아무 생각이 없습니다. 나는이 특별한 기능에 실수가 있다고 생각하지만, 나는 어디 있는지 모른다. 나는이 쓰레기 값을 피할 필요가있다. 나머지 구현은 완벽하게 작동합니다.

int last; 
    int count = 0; 
    for(int i = lengthOfArray-1; i >=0; i--){ 
     if(last == arr[i]){ 
      ++count; 
     }else{ 
     cout << last << endl; 
     count = 1; 
     } 
     last = arr[i]; 
    } 
    if (count > 0) { 
     cout << last << endl; 
    } 
+0

처럼해야하지만, 당신이 그것을 수행하는 여분의 물건을 필요로하지 않는'표준 : endl'를 사용하지 마십시오. '\ n '은 한 줄을 끝냅니다. –

답변

1

last을 초기화해야합니다. 그렇지 않으면 가비지가 채워지고 로직에 따라 last이 인쇄됩니다.

int last = arr[lengthOfArray-1]; 
int count = 0; 
for(int i = lengthOfArray-1; i >=0; i--){ 
    if(last == arr[i]){ 
     ++count; 
    } else{ 
     cout << last << endl; 
     count = 1; 
    } 
    last = arr[i]; 
} 
if (count > 0) { 
    cout << last << endl; 
} 
0

사용자는 초기화되지 않은 값 (last)를 사용하고 a[i] 동일하지 않은 경우를 제 arr[i]과 비교하고 출력한다. 초기화되지 않은 값을 사용하면 정의되지 않은 동작이 발생합니다. 이 경우 last는 출력을 설명하는 -292742으로 초기화됩니다.

0
else{ 
    last = arr[i]; 
    cout << last << endl; 
    count = 1; 
} 

당신의 else 문이는 문제가되지 않습니다이