微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++中变量的值自动改变

如何解决C++中变量的值自动改变

我正在为学生编写一个简单的堆栈程序。代码如下:

/**
 * This is a menu driven program to use stack
 * */

#include <iostream>

using namespace std;

const int stack_size = 10;
class Stack
{
private:
    /* data */
    int top;
    int data[stack_size - 1];

public:
    Stack()
    {
        top = -1;
    }
    ~Stack() {}

    void push(int x)
    {
        if (top == stack_size-1)
        {
            cout << "Error: Stack overflow..." << endl;
        }
        else
        {
            data[++top] = x;
            cout << "Item " << x << " pushed successfully..." << endl;
        }
    }

    void pop()
    {
        if (top == -1)
        {
            cout << "Error: Stack underflow..." << endl;
        }
        else
        {
            cout << "Item poped is: " << data[top--] << endl;
        }
    }
    void display()
    {
        cout << "Items in the stack" << endl;
        cout << "------------------" << endl;
        if (top == -1)
        {
            cout << "Stack is empty..." << endl;
        }
        else
        {
            for (int i = top; i >= 0; i--)
            {
                cout << data[i] << endl;
                ;
            }
        }
    }
};

int main()
{
    Stack s;
    char choice;
    int loop = 1,x;
    while (loop == 1)
    {
        cout << "Menu" << endl;
        cout << "1. Push" << endl;
        cout << "2. Pop" << endl;
        cout << "3. display" << endl;
        cout << "4. Exit" << endl;
        cout << "Enter your choice: ";
        cin >> choice;
        switch (choice)
        {
        case '1':
            //push
            cout << "Enter value to push: ";
            cin >> x;
            s.push(x);
            break;
        case '2':
            //pop
            s.pop();
            break;
        case '3':
            //display
            s.display();
            break;
        case '4':
            //exit
            loop = 0;
            break;
        default:
            //invalid
            cout << "Error: Invalid Selection..." << endl;
            break;
        }
        //fflush(stdin);
    }
}

问题是当我连续推送 10 个项目时,然后在第 10 个元素之后,循环变量的值会自动更改。例如如果我在第 10 次迭代时输入 10,在 push 操作后,循环的值变为 10,如果我在第 10 次迭代时输入 11,则循环的值变为 11,并且 while 循环中断。 请有人帮我弄清楚为什么会这样。

使用带有 mingw-64 和 C/C++ 扩展包和代码运行器扩展的 vscode 的工具。

解决方法

data[] 的大小为 9,因此第 10 次推送存在未定义的溢出错误

const int stack_size = 10;
class Stack
{
private:
    /* data */
    int top;
    int data[stack_size - 1]; // = data[9]

你的逻辑有一些严重的问题 您正在使用无限 while 循环,因此循环变量与此处无关 根据您的逻辑,您有一个固定大小的数组,并且可以将无限值推送给它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。