2016-12-23 9 views
-4

したがって、重複を避けて配列を逆順に印刷する必要があります。出力がなければならない :配列を逆順に印刷して重複を避けるC++

100000 
9995 
992 
22 
14 

それは画面に、この最初のガベージ値がどこから来たの、私は見当がつかない

-292742 
100000 
9995 
992 
22 
14 

を印刷し コードは、1つのミスを除いて、正常に動作します。私は間違いがこの特定の機能にあると思うが、私はどこが分からない。私はこのゴミ値を避ける必要があります。残りの実装は完全に機能します。

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

これは問題ではありませんが、あなたはそれがない余分なものを必要としない限り、 'のstd :: 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文は、この

関連する問題