请帮助,我无法理解错误在哪里,编译后,程序没有任何显示。需要创建2个堆栈,其中一个将包含随机数,另一个将仅包含第一个堆栈中的那些数字,这大于第一个堆栈中所有数字的平均值
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
struct stack //our stack
{
int num;
stack* ptr = NULL;
};
void addtostack(int &n, stack* p) //add element to stack
{
stack* newstack = new stack;
newstack->num = n;
newstack->ptr = p;
p = newstack;
}
void showstack(stack* p) //show stack
{
stack* current = p;
while (current->ptr)
{
cout << current->num << endl;
current = current->ptr;
}
}
int main()
{
srand(time(NULL));
const int SIZE = 5;
stack* first = new stack;
int rnd;
double average = 0;
for (int i = 0; i < SIZE; i++)
{
rnd = -50 + rand() % 101;
addtostack(rnd, first);
average += rnd;
}
average /= SIZE;
showstack(first);
system("pause > nul");
}
答案 0 :(得分:1)
该行
p = newstack;
没有做你希望它会做的事。
它会更改变量p
的本地副本。 main
中的指针仍指向用它初始化的唯一对象。
您可以通过以下两种方式解决问题:
通过引用传递p
。您不需要通过引用传递n
。
void addtostack(int n, stack*& p) //add element to stack
{
stack* newstack = new stack;
newstack->num = n;
newstack->ptr = p;
p = newstack;
}
将新指针返回给调用函数。
stack* addtostack(int n, stack* p) //add element to stack
{
stack* newstack = new stack;
newstack->num = n;
newstack->ptr = p;
return newstack;
}
然后将main
更改为:
for (int i = 0; i < SIZE; i++)
{
rnd = -50 + rand() % 101;
first = addtostack(rnd, first);
average += rnd;
}