使用这段代码,下面的执行会产生奇怪的结果:
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/