[c++] Problem z dopisaniem 0 do końca tablicy

0

Witam mam problem natury technicznej tzn. program ma usuwać z tablicy powtarzajace sie cyfy, czyli usuwamy pierwsza powtarzajaca sie przesuwamy ciag w lewo i na koncu dodajemy 0, i z tym zerem mam problem. Może ktoś rzuci okiem na kod bo niby zero w ostatnie miejsce tablicy wstawia ale w efekcie koncowym wyswietla na ostatnich pozycjach kosmiczne liczby.

#include<iostream>

using namespace std;

int main()
{
 int *tab,n,ile=0;
 cout<<"Podaj rozmiar tablicy\n";
 cin>>n;
 tab= new int[n];
 for(int i=0;i<n;i++)
 {   cout<<"tab["<<i+1<<"]"<<"\n";
     cin>>tab[i];
 }
 
 for(int i=0;i<n;i++)
 {
         for(int j=i+1;j<n;j++)
         {
                 if (tab[i]==tab[j])
                 {
                                    ile++;
                                    for(j=i;j<n;j++)
                                    tab[j]=tab[j+1];
                                   }
                                   }
                                   }
                
                                    for (int i=n;n>0;i--)
                                    {cout<<"tab["<<i<<"] "<< tab[i]<<"\n";
                                    tab[i]=0;                                         //tutaj niby wstawiam w ostatnim miejscu 0
                                    cout<<"tab["<<i<<"] "<< tab[i]<<"\n";
                                    ile--;
                                    if (ile>=0)
                                    goto koniec;
                                    }
                                    koniec:
 cout<<"  ile - "<<ile;
 for(int i=0;i<n;i++)
 {   cout<<"tab["<<i+1<<"]"<<"= "<<tab[i]<<"\n"; // tu mi wyslwietla kosmiczne liczby na koncu tablicy
 }
 
system("pause");
 
}
0
#include<iostream>

using namespace std;

int main()
{
   int *tab,m,n,ile=0;
   cout<<"Podaj rozmiar tablicy\n";
   cin>>n;
   m=n;
   tab= new int[n];
   for(int i=0;i<n;i++)
   {   
      cout<<"tab["<<i+1<<"]"<<"\n";
      cin>>tab[i];
   }
   for(int i=0;i<n;i++)
   {
      for(int j=i+1;j<n;j++)
      {
         if (tab[i]==tab[j])
         {
            ile++;
            for(int k=j;k<n-1;k++)
            tab[k]=tab[k+1];
            tab[n-1]=0;
            j--;n--;
         }
      }
   }
   cout<<"  ile - "<<ile<< "\n";
   for(int i=0;i<m;i++)
   {   
      cout<<"tab["<<i+1<<"]"<<"= "<<tab[i]<<"\n"; // tu mi wyslwietla kosmiczne liczby na koncu tablicy
   }
   system("pause");
}
0

Tablica n elementowa ma zakres 0n-1, a w pętli (tam gdzie wstawiasz zera) lecisz po indeksach n1. Powinno być

for(int i=n-1; i >=0; i--)

Tym razem dałeś chociaż kolorowanie składni ;) teraz naucz się jeszcze formatować kod :>

A poza tym, LUDZIE goto NIE UŻYWA SIĘ WSZĘDZIE GDZIE MOŻNA, TYLKO TAM GDZIE TRZEBA. A jest to istotna różnica.

Edytka:
szczególnie, że tutaj wystarczyłby break ... "Boże, widzisz i nie grzmisz" jak to niektórzy zwykli mawiać :|

1 użytkowników online, w tym zalogowanych: 0, gości: 1