如何解决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 举报,一经查实,本站将立刻删除。