用户输入作为堆栈中的参数
User input as argument in stack
我想做的是使用函数将用户输入推送到堆栈,因为我有一个切换案例菜单,每个案例都有它自己的功能(打印堆栈,添加到堆栈..)打印堆栈有效,用户输入也有效,但似乎没有任何内容被添加到堆栈中。
我将向您展示我到目前为止尝试过的东西:
void addStack(stack <int> myStack, int number){
myStack.push(number);
}
主要功能:
int nm;
stack <int> st;
do{
menu();
cin >> selection;
switch(selection){
case 2:
cin >> nm;
addStack(st,nm);
break;
case 3:
printStack(st);
break;
我最初尝试的是将所有内容都放入函数本身:
void addStack(stack <int> myStack){
int number;
cin >> number;
myStack.push(number);
}
但我得到了相同的结果。
在这样的原型中:
void addStack(stack<int> myStack)
更改是在本地进行的,一旦函数结束,所有内容都会被丢弃。出于这个原因,您可能想要使用引用运算符——这样您就可以更改 actual 值(作为参数传递)。
你可以这样做:
void addStack(stack<int>& myStack)
您正在通过 callByValue 将 st
传递给 addStack()
,这意味着方法 addSTack()
有它自己的堆栈副本,并且您在该方法中所做的任何更改都不会反映回来在 main()
方法中 .
解决方案:
使 stack <int> st
全局化,即在任何方法之外声明它,然后您就不需要将它传递给每个方法
通过引用调用传递 st
,这将使 addStack()
方法中所做的更改反映在调用方法中(即 main())
我想做的是使用函数将用户输入推送到堆栈,因为我有一个切换案例菜单,每个案例都有它自己的功能(打印堆栈,添加到堆栈..)打印堆栈有效,用户输入也有效,但似乎没有任何内容被添加到堆栈中。 我将向您展示我到目前为止尝试过的东西:
void addStack(stack <int> myStack, int number){
myStack.push(number);
}
主要功能:
int nm;
stack <int> st;
do{
menu();
cin >> selection;
switch(selection){
case 2:
cin >> nm;
addStack(st,nm);
break;
case 3:
printStack(st);
break;
我最初尝试的是将所有内容都放入函数本身:
void addStack(stack <int> myStack){
int number;
cin >> number;
myStack.push(number);
}
但我得到了相同的结果。
在这样的原型中:
void addStack(stack<int> myStack)
更改是在本地进行的,一旦函数结束,所有内容都会被丢弃。出于这个原因,您可能想要使用引用运算符——这样您就可以更改 actual 值(作为参数传递)。
你可以这样做:
void addStack(stack<int>& myStack)
您正在通过 callByValue 将 st
传递给 addStack()
,这意味着方法 addSTack()
有它自己的堆栈副本,并且您在该方法中所做的任何更改都不会反映回来在 main()
方法中 .
解决方案:
使
stack <int> st
全局化,即在任何方法之外声明它,然后您就不需要将它传递给每个方法通过引用调用传递
st
,这将使addStack()
方法中所做的更改反映在调用方法中(即 main())