неправильный вывод из стека - PullRequest
0 голосов
/ 28 октября 2019

Вывод: 100 100
Должно быть: 9 100
Я дважды вызвал push. Когда я вызываю print, вывод неправильный.

int main(){
    int i=9;
    Stackc s;
    s.push(i);
    i=100;
    s.push(i);
    s.print();
    return 0;
}

это.h file

class Stackc{
    int arr[100];
    int iTop;
public:
    int top();
    void push(int i);
    void pop();
    void print();
    Stackc();
};

это конструктор

Stackc::Stackc(){
    iTop=-1;
    for(int i=0;i<100;i++)
        arr[i]=0;
}

эта функция помещает элемент в стек

void Stackc::push(int i){
    iTop++;
    arr[iTop]=i;
}

это для печати стека

void Stackc::print(){
    for(int i=0;i<=iTop;i++)
        cout<<arr[iTop]<<" ";
    cout<<endl;

}

1 Ответ

3 голосов
/ 28 октября 2019

Эта строка:

cout << arr[iTop] << " ";

Должно быть

cout << arr[i] << " ";

В будущем я бы рекомендовал взглянуть на Как создать минимальный воспроизводимый пример ,Например, минимальный пример не обязательно должен быть в нескольких файлах (если только вопрос не в том, как обрабатывать несколько файлов). В идеале код можно запустить, просто скопировав / вставив один фрагмент кода, например так:

class Stackc {
    int arr[100];
    int iTop;
public:
    Stackc() {
        iTop = -1;
        for (int i = 0; i < 100; i++)
            arr[i] = 0;
    }

    void push(int i) {
        iTop++;
        arr[iTop] = i;
    }

    void print() {
        for (int i = 0; i <= iTop; i++)
            std::cout << arr[i] << " ";
        std::cout << std::endl;

    }

};

int main() {
    int i = 9;
    Stackc s;
    s.push(i);
    i = 100;
    s.push(i);
    s.print();
    return 0;
}

Я бы также порекомендовал следующие вопросы и ответы:

Почему "используется пространство именстанд;»считается плохой практикой?

...