【问题标题】:[stack][list]I can't understand my mistake[stack][list]我无法理解我的错误
【发布时间】:2018-05-21 19:27:43
【问题描述】:

请帮忙,我不明白哪里出错了,编译后程序没有任何显示。需要创建 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");
}

【问题讨论】:

  • 您遇到了什么问题? (错误信息、行为等)
  • visual studio 不显示任何错误信息
  • 那么问题是没有错误?
  • 很遗憾地通知您,您没有得到正确的教育。这是可怕的代码。这并不可怕,因为您是初学者并且不知道更好,这很可怕,因为您被教导编写可怕的代码。如果你想学习 C++ buy a book 而忽略他们教给你的一切。
  • 您是否使用调试器来确保每一行都按照您的预期进行?是否可以编写单元测试来测试您的个人方法?我们一直为 C#、Java 和 JavaScript 这样做。

标签: c++ list stack


【解决方案1】:

线

p = newstack;

没有做你希望它做的事。

它更改变量p 的本地副本。 main 中的指针仍然指向它初始化时使用的唯一对象。

您可以通过以下几种方式解决它:

  1. 通过引用传递p。不过,您不需要通过引用传递n

    void addtostack(int n, stack*& p) //add element to stack
    {
        stack* newstack = new stack;
        newstack->num = n;
        newstack->ptr = p;
        p = newstack;
    }
    
  2. 返回指向调用函数的新指针。

    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;
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多