【发布时间】:2017-02-07 03:33:13
【问题描述】:
我很困惑我的代码哪里出错了。输出不是 1,2,3,而是 1,1,1。关于我能做什么的任何建议?我猜我的错误在于写入数据或使用变量值时。
class Binary
{
public:
Binary(int num);
~Binary();
void createBinary();
void writeBinary();
void readBinary();
string binFile;
int value;
fstream binaryFile;
};
Binary::Binary(int num)
{
value = num;
binFile = "BinaryFile.bin";
}
Binary::~Binary()
{
}
void Binary::createBinary()
{
binaryFile.open(binFile, ios::out | ios::binary);
binaryFile.close();
}
void Binary::writeBinary()
{
if (!binaryFile) //if file does not exist
{
createBinary();
}
binaryFile.open(binFile, ios::app | ios::binary);
binaryFile.write((char*)&value, sizeof(value));
binaryFile.close();
}
void Binary::readBinary()
{
binaryFile.open(binFile, ios::in |ios::binary);
binaryFile.read((char*)&value, sizeof(value));
binaryFile.close();
cout << value << ", ";
}
int main()
{
Binary num1(1);
Binary num2(2);
Binary num3(3);
num1.writeBinary();
num2.writeBinary();
num3.writeBinary();
num1.readBinary();
num2.readBinary();
num3.readBinary();
return 0;
}
【问题讨论】:
-
小测验:
readBinary()每次调用它的 3 次都读取了文件的哪一部分?您的多项选择答案是: 1. 不知何故,它神奇地知道之前调用readBinary()已读取文件的哪一部分,并向前跳到文件的下一部分,或者 2. 始终是文件的开头。你有 30 秒的时间来回答。时钟开始滴答作响……现在。 -
更简单地说:打开文件一次,反复读取,然后关闭。
-
它应该在文件的开头读取
-
对。那么,为什么每次调用
readBinary()都会从文件开头读取相同的值?