• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Inicjalizowanie tablicy w kilku wywołaniach funkcji

Object Storage Arubacloud
0 głosów
177 wizyt
pytanie zadane 12 marca 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
edycja 12 marca 2020 przez amtrax

Cześć, 

za każdym razem gdy wywołana zostanie metoda, wartości maja być dodawane kolejno do tej samej tablicy (dynamicznej, zdefiniowanej w klasie).
Używam w tym celu dwóch zmiennych statycznych; jedna określa ilość dostępnych miejsc, druga wskazuje w pętli  pozycje od których w kolejnych powtórzeniach należny zacząć. 

Problem polega na tym, że w każdym kolejnym wywołaniu funkcji po wpisaniu ile wartości chce podać, program przechodzi do kolejnych instrukcji nie dając zainicjalizowac  elementów. Gdzie leży problem ? 

Program jest podzielony na 3 pliki (definicje, deklaracje, funkcja main). 

void List::add()
{
  int ile_chce = 0;
  static int dostepne = ile;
  static int pozycja = 0;
  int counter= 0;;

  cout << "Twoja tablica ma "<<ile<<" wartosci\n";
  cout << "Dostepnych jest: "<<dostepne<<endl;
  cout << "Ile wartosci chcesz wpisac: ";
    cin >> ile_chce;
    if(ile_chce <= dostepne)
    {

        for ( pozycja; pozycja < ile_chce; pozycja++)
        {
            cout << "Podaj "<<pozycja+1<< " wartosc: ";
            cin >> tab[pozycja];
            counter++;
            cout<<endl;

        }
        dostepne-= ile_chce;
        cout << "Pozostalo: "<<dostepne<<" ";
        cout << "Wpisales: "<<counter<<" wartosci\n";

    }

}
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED



class List
{
private:
    int ile;
    int *tab = new int [ile];
public:
    List(int x = 4);
    void add();
    void show();
 

};
#endif // LIST_H_INCLUDED
#include <iostream>
#include "list.h"
using namespace std;

int main()
{


List a;
a.add();
a.add();

a.show();

    return 0;
}

 

Mam jeszcze jedno pytanie odnośnie tej metody. Czy jeżeli wywołam metodę dla obiektu a, to czy swobodnie bedę mógł wywołać ją dla obiektu b ; czy zmienne statyczne będą miały domyślne wartości niezależne od wcześniejszych wywołań tej metody?

 

Pozdrawiam 

1 odpowiedź

0 głosów
odpowiedź 12 marca 2020 przez j23 Mędrzec (194,920 p.)
wybrane 12 marca 2020 przez amtrax
 
Najlepsza

int ile;

int *tab = new int [ile];

Jaką wartość ma ile w chwili wywołania new?

Daj taki konstruktor:

List(int x = 4)
 : ile(x), tab(new int[x]) 
{}

Te zmienne statyczne zrób polami klasy List.

komentarz 12 marca 2020 przez amtrax Dyskutant (9,630 p.)
Niestety rozwiązanie z takim konstruktorem również nie działa.
Co miałes na mysli odnoscie statycznych zmiennych polami klasy?
komentarz 12 marca 2020 przez j23 Mędrzec (194,920 p.)

Rozwiązanie z takim konstruktorem jest poprawne (w przeciwieństwie do tego, co masz u siebie).

 

Co do pól:

class List 
{
private:
    int ile;
    int * tab;
    int dodanych;

    List(int x = 4)
    : ile(x), tab(new int[x]), dodanych(0) 
    {}
    
    ...
};

void List::add() 
{
    int ile_chce, dostepne = ile - dodanych;

    std::cout << "Twoja tablica ma " << ile << " wartosci\n";
    std::cout << "Dostepnych jest: " << dostepne << '\n';
    std::cout << "Ile wartosci chcesz wpisac: ";

    std::cin >> ile_chce;

    if (ile_chce < dostepne) {
        while (ile_chce--) {
            std::cout << "Podaj " << dodanych + 1 << " wartosc: ";
            std::cin >> tab[dodanych];
            ++dodanych;
        }

        std::cout << "Pozostalo: " << ile - dodanych << " ";
        std::cout << "Wpisales: " << dostepne - ile - dodanych << " wartosci\n";

    }

}

 

Podobne pytania

0 głosów
2 odpowiedzi 438 wizyt
pytanie zadane 27 sierpnia 2015 w C i C++ przez criss Mędrzec (172,590 p.)
0 głosów
1 odpowiedź 320 wizyt
pytanie zadane 10 marca 2018 w C i C++ przez dasad33 Użytkownik (710 p.)
0 głosów
1 odpowiedź 453 wizyt
pytanie zadane 26 stycznia 2019 w C i C++ przez Pawli Początkujący (250 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...