【发布时间】:2017-04-29 23:41:10
【问题描述】:
我试图读取如下所示的 .dat 文件:
T001CD1 10000.00 2.5 2
T001CD2 50000.00 3.5 6
H407CD1 20000.00 2.0 1
M555CD1 30000.00 3.5 5
N423CD1 50000.00 3.0 4
N423CD2 60000.00 2.5 2
S602CD1 80000.00 4.0 8
H707CD1 25000.00 2.5 7
使用此代码:
void readCdAccountInfo()
{
ifstream in_stream;
in_stream.open("CdAccounts.dat");
while (!in_stream.eof())
{
int i = 0;
string iDTemp;
float ratetemp;
int yeartemp;
double depotemp;
while (in_stream
>> iDTemp
>> depotemp
>> ratetemp
>> yeartemp
)
{
CCdAccount temp(iDTemp, depotemp, ratetemp, yeartemp);
accounts[i] = temp;
i++;
}
{
if (in_stream.fail())
{
cout << "Input file opening failed. \n";
exit(1);
}
in_stream.close();
}}
}
ID、存款(私人会员)、利率和年份都是我所拥有的课程的一部分。
当我运行 main 时,唯一弹出的是输入文件失败消息。
【问题讨论】:
-
你有没有用调试器单步调试代码,看看它在失败之前是否成功地通过了循环?
-
这是我第一次看到有人在阅读完整个文件后,在关闭文件之前报告“打开失败”。
-
到达文件末尾会为流设置
eofbit。但是,尝试读取某些内容的操作(如operator>>())也会设置failbit,如果到达文件末尾会导致它们失败(即不接收输入)。这将导致in_stream.fail()在while语句中的in_stream >> iDTemp >> depotemp >> ratetemp >> yeartemp到达文件末尾时变为真。 -
外部
while循环看起来很奇怪,因为你的内部while已经读取了所有记录。