Dlaczego program drukuje same zera

0

Dlaczego poniższy program wyświetla same zera? Co źle zrobiłem?

#include <iostream>
using namespace std;

class Tab_arr
{
public:
    int arr[10] = {10};
    int index = {10};
    auto wczytaj_arr(auto *tab, auto index);
    auto wydrukuj_arr(auto *tab, auto index);

} ;
auto Tab_arr::wczytaj_arr(auto *tab, auto index)
{
    for (auto i =0;i< index;++i)
      tab[index]=i;
      
    return 0;
}
auto Tab_arr::wydrukuj_arr(auto *tab, auto index)
{
    for (auto i=0;i<index;++i)
        cout<<tab[index];
    cout<<endl;

    return 0;
}
int main()
{
    Tab_arr tar;
    tar.wczytaj_arr(tar.arr, tar.index);
    tar.wydrukuj_arr(tar.arr,tar.index);

    cin.get();
    return 0;
}


0

Użyj debuggera

2

zamiast tab[index]=i; pownieneś mieć tab[i]=i; to samo przy wypisywaniu. Ogólnie w ten sposób mażesz po pamięci.

0

Teraz program działa tak jak powinien działać. Dziękuję! @kaczus

3
  1. Uprość
  2. Nie używaj niepotrzebnie słowa auto
  3. Jeżeli funkcja nie musi nic zwracać to zdefiniuj ją jako void
  4. Nie wywołuj funkcji z klasy przekazując do niej jej zmienne. Nie musisz tego robić, gdyż cały czas masz do nich dostęp.

Zmień funkcję wczytaj_arr na

void Tab_arr::wczytaj_arr()
{
    for( auto i=0 ; i<10; ++i ) arr[i]=i;
}

Powodzenia.

2

Jeśli uczysz się C++ (a na to wygląda), to -- jeśli to możliwe -- odpuść surowe tablice, a zrób wszystko na vectorach. Gdybyś użył vectora i do niego dostawał się przez tab.at(index) zamiast tab[index] dostałbyś wyjątek zamiast UB i szybciej zorientował się, gdzie tkwi problem.

0

@koszalek-opalek. Biorąc pod uwagę wszystko to co zostało powiedziane nieco wyżej wykombinowałem taki program (niżej). Czy oto mniej więcej chodziło?```

#include <iostream>
#include <vector>
using namespace std;

class Put_wek
{
private:
    vector <int> wek;
    vector <int>::iterator pos;
    unsigned int i=0;
    int j=0;
    int index=0;
public:
    void pobierz_dane();
    void pokaz_dane();
};
void Put_wek::pobierz_dane()
{
    cout<<"POBIERANIE DANYCH"<<endl;
    cout<<"-----------------"<<endl;
    cout<<"Podaj liczbe:";
    cin>>index;
    wek.reserve(index);
    for (i=0;i<index;++i)
      wek.push_back(i);

}
void Put_wek::pokaz_dane()
{
    cout<<"DRUKOWANIE DANYCH"<<endl;
    cout<<"----------"<<endl;
    cout<<endl;
    for (pos=wek.begin();pos!=wek.end();++pos)
    {
        j++;
        cout<<"["<<j<<"]"<<"\t"<<*pos<<endl;
    }
}
int main()
{
    Put_wek pw;
    pw.pobierz_dane();
    pw.pokaz_dane();

    cin.get();
    cin.get();
    return 0;
}
0

Iterator zdecydowanie powinien być zmienną w funkcji, a nie elementem klasy. Poza tym, użyj ranged for: for(int x : wek)

1
wojownik266 napisał(a):

void Put_wek::pokaz_dane()
...
j++;
...

odpal dwa lub więcej razy pod rząd.

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