c++ - 从文件读取后出现奇怪的输出

标签 c++

使用这段代码,下面的执行会产生奇怪的结果:

C 100
R
W

文本文件的第一行定义了要从中读取的元素数量,它包含一些小于 15 的值,但每次我运行它时,数组中的第一个值总是打印为 87(ASCII 值对于'W')。如果我将“W”功能更改为“X”,则数组中的第一个结果为 88。

#include <iostream>
#include <fstream>

using namespace std; 

int arrayLength;

class ELEMENT
{
    public:
        int key;
};

class HEAP
{
    public:
        int capacity;
        int size;
        ELEMENT H [];
};

HEAP initialize(int n)
{
    HEAP h;
    h.capacity = n;
    h.size = 0;
    return h;
}

void buildHeap(HEAP &h, ELEMENT *a)
{
    h.size = arrayLength;
    for (int i = 1; i <= arrayLength; i++)
    {
        h.H[i] = a[i];
    }

    for (int i = h.size/2; i >= 1; i--)
    {
        // HEAPIFY HERE
    }
}

void printHeap(HEAP &h)
{
    cout << "Capacity:\t" << h.capacity << endl;
    cout << "Size:\t\t" << h.size << endl;
    cout << "|";
    for (int i = 1; i <= h.size; i++)
    {
        cout << " ";
        cout << h.H[i].key << " |";
    }
    cout << endl;
}

int main()
{
    char c;
    int val;
    HEAP h;

    while (c != 'S')
    {
        cin >> c;
        switch (c)
        {
            case 'S':
                break;
            case 'C':
                cin >> val;
                h = initialize(val);
                break;
            case 'W':
                printHeap(h);
                break;
            case 'R':
                {
                    ifstream infile;
                    infile.open("HEAPinput.txt");
                    infile >> arrayLength;
                    ELEMENT* a = new ELEMENT[arrayLength];
                    for (int i = 1; i <= arrayLength; i++)
                        infile >> a[i].key;
                    infile.close();
                    buildHeap(h, a);
                }
                break;
        }
    }

    return 0;
}

它正在 Unix 服务器上使用 g++ 编译。

编辑: 澄清: 使用包含以下内容的文本文件(空格 = 新行):

12 9 10 11 12 8 7 6 5 4 3 2 1

输出是:

Capacity: 100

Size: 12

| 87 | 10 | 11 | 12 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |

所以除了第一个元素外,它都可以正常工作。

最佳答案

随心所欲

 ELEMENT H [];

正在做,但可能不是。 C++ 不支持动态数组 - 您需要使用 std::vector 类。

顺便说一句,C++ 按照惯例使用大写来命名预处理器宏和常量。您应该使用混合大小写来命名您的类。

关于c++ - 从文件读取后出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/797582/

相关文章:

c++ - Concert 技术中的按列建模 - 列生成

C++ 链接器问题

c++ - 使用套接字,发出通信结束信号的最佳做法是什么?

c++ - 将数组传递给对象方法

c++ - 在单个列表中存储多个派生类类型

c++ - 是否可以隐藏具有 boost 范围的底层容器?

c++ - [over.sub]/1 中例子中使用的下标运算符是什么意思?

c++ - 进程数量增加导致 MPI 性能损失

c++ - 如何按对的第二个值对 set<pair<unsigned int, double>> 进行排序?

c++ - 哪个 C++ 单元测试框架不需要我将应用程序构建为库?