C++ [堆栈][列表]我可以';我不理解我的错误

C++ [堆栈][列表]我可以';我不理解我的错误,c++,list,stack,C++,List,Stack,请帮忙,我不明白哪里出错了,编译后,程序并没有任何显示。需要创建两个堆栈,其中一个将包含随机数,另一个将只包含第一个堆栈中的数字,这大于第一个堆栈中所有数字的平均值 #include "stdafx.h" #include <iostream> #include <ctime> using namespace std; struct stack //our stack { int num; stack* ptr = NULL; }; void add

请帮忙,我不明白哪里出错了,编译后,程序并没有任何显示。需要创建两个堆栈,其中一个将包含随机数,另一个将只包含第一个堆栈中的数字,这大于第一个堆栈中所有数字的平均值

#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");
}
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
结构堆栈//我们的堆栈
{
int-num;
堆栈*ptr=NULL;
};
void addtostack(int&n,stack*p)//将元素添加到堆栈
{
stack*newstack=新堆栈;
newstack->num=n;
新闻标题->ptr=p;
p=新闻标题;
}
void showstack(stack*p)//显示堆栈
{
堆栈*电流=p;
同时(当前->ptr)
{
coutnumptr;
}
}
int main()
{
srand(时间(空));
常数int SIZE=5;
stack*first=新堆栈;
int rnd;
双平均=0;
对于(int i=0;inul”);
}
线路

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;
    }
    
    for(int i=0;i

  • 你遇到了什么问题?(错误消息、行为等)visual studio不显示任何错误消息问题是没有错误?很抱歉,我通知您,您没有被正确地教导。这是可怕的代码。这并不可怕,因为你是一个初学者,不知道更好,这是可怕的,因为你被教写可怕的代码。如果你想学习C++,忽略他们教给你的一切,你是否使用调试器来确保每一行都在做你所期望的?是否可以编写单元测试来测试您的单个方法?我们一直在为C#,Java和JavaScript做这件事。