我正在尝试从文件中读取数字,然后使用动态内存将其存储在数组中。当我尝试打印数组的成员时,它显示的是地址而不是实际内容。
// CLASS METHOD IMPLEMENTATIONS
#include "DataHousing.h"
// CONSTRUCTORS
DataHousing::DataHousing() {
}
void DataHousing::FillArray() {
int tempIn = 0;
int count = 0;
// attempt to open the file with read permission
ifstream inputHandle("NumFile500.txt", ios::in);
// count how many numbers are in each file
if (inputHandle.is_open() == true) {
while (!inputHandle.eof()) {
inputHandle >> tempIn;
count++;
}
// allocate memory for array
int* pFileContents = new int[count];
// fill array
while (!inputHandle.eof()) {
for (int i = 0; i < count; i++) {
inputHandle >> pFileContents[i];
}
}
cout << &pFileContents[2];
}
else {
cout << "error";
}
}
这是我第一次尝试这样的事情,我非常困惑。我在这里错了吗?
一元&
运算符将检索地址,因此显示地址是很自然的。
要显示内容,请删除&
中的cout << &pFileContents[2];
并显示内容。
也是代码的计数部分
while (!inputHandle.eof()) {
inputHandle >> tempIn;
count++;
}
有两个错误。
首先,您正在递增count
,而最后一次读取没有成功。
第二,您正在尝试从EOF中已经读取的ifstream
中读取。您必须清除EOF标志,并像这样查找文件的开头:
最后,计数部分应为:
while (inputHandle >> tempIn) {
count++;
}
inputHandle.clear();
inputHandle.seekg(0, ios_base::beg);
我发现您正在尝试使用以下命令打印所需的值:
cout << &pFileContents[2];
由于pFileContents
是一个数组,所以pFileContents[2]
将访问相同的第二个元素(值)。但是由于您已经在元素前面加上了&
,所以它将打印出数组第二个元素的地址。
为了打印数组第二个元素的值,只需使用:
cout << pFileContents[2];
注意后面的代码的区别,我们在&
之后还没有使用cout <<