从函数C ++获取值后得到的不正确的总和

时间:2017-05-12 19:37:14

标签: c++ list

我有一个移动光标的列表,我需要得到我的值的总和。

我无法理解,为什么我得到了错误的结果总和。(调试后我看到错误的数字,这意味着我从方法getCursor()返回的值是错误的)。通过方法DataType getCursor();了解我的主要错误。

但我无法得到错误的地方。

请帮助解决问题。 这是我的代码:

ListADT.h

#include<iostream>


const int defMaxListSize = 10;
typedef int DataType;

class ListADT
{
private:
    //Data members
    int maxSize;
    int size;
    int cursor;

    DataType *dataItems;
public:
    //Constructor
    ListADT(int maxNumber = defMaxListSize);

    //Destructor
    ~ListADT();

    //List manipulation operations
    void insert(const DataType &newDataItem);   //Insert after cursor
    void remove();                              //Remove Data item
    //void replace(const DataType &newDataItem);    //Replace data item


    //List status operations 
    bool isEmpty()const;                        //List is empty
    bool isFull() const;                        //List is full

    //List iteration operations
    void gotoBeginning() ;  //Go to beginning
    void gotoEnd();         //Go to end
    bool gotoNext();            //Go to next data item
    bool gotoPrior();       //Go to prior data item
    DataType getCursor();//Return data item

    //Output the list structure -used in testinf/debugging
    //void showStructure()const;
};

ListADT.cpp

#include "ListADT.h"

ListADT::ListADT(int maxNumber):size(10)
{
    dataItems = new DataType[size];
}

ListADT::~ListADT()
{
    delete dataItems;
}

void ListADT::insert(const DataType & newDataItem)
{
    if (size + 1 <= maxSize)
        dataItems[++cursor] = newDataItem;

}

void ListADT::remove()
{
    if (size - 1 >= 0)
        cursor--;
}

bool ListADT::isEmpty() const
{
    if (size <= 0)
        return true;
    else
        return false;
}

bool ListADT::isFull() const
{
    if (size == defMaxListSize)
        return true;
    else
        return false;
}

void ListADT::gotoBeginning()
{
    cursor = 0;
}

void ListADT::gotoEnd()
{
    cursor = size;
}

bool ListADT::gotoNext()
{
    if (cursor < size)
    {
        cursor++;
        return true;
    }
    return false;
}

bool ListADT::gotoPrior()
{
    if (!isEmpty() && cursor != 1)
    {
        cursor--;
        return true;
    }
    else return false;
}

DataType ListADT::getCursor()
{
    if (!isEmpty())
    {
        return dataItems[cursor];
    }
    else
    {
        std::cout << "Empty list" << std::endl;
    }
}

Source.cpp

#include <iostream>
#include "ListADT.h"

void main()
{
    ListADT samples;
    int newSample;
    int total = 0;

    //Read in a set of samples from the keyboard.
    std::cout << "Enter list of samples (end with eof): ";
    for (int i = 0; i < 10; i++)
    {
        std::cin >> newSample;
        samples.insert(newSample);
    }
    //Sum the samples and output the result.

        if (!samples.isEmpty())
        {
            samples.gotoBeginning();
            std::cout << "CUR " << samples.getCursor() << std::endl;
            do
                total += samples.getCursor();
            while (samples.gotoNext());
        }
        std::cout << "Sum is " << total << std::endl;
        system("pause");
}

1 个答案:

答案 0 :(得分:0)

一些建议:

- 使用调试器
- 初始化变量
- 使用std::vector<DataType>代替数组DataType[size]

但也许主要问题在于这一行:

dataItems[++cursor] = newDataItem;

你应该使用后增量

dataItems[cursor++] = newDataItem;

您永远不会更新变量size