[英]c++ program reading a file
我的代码:
void load_books(){
ifstream myfile(path, ios::in);
if (myfile.fail()){
cout << "coudln't open file" << "\n\n";
}
else{
while (myfile){
myfile >> book1[i].id >> book1[i].title >> book1[i].p_name >> book1[i].p_address >> book1[i].aut_name;
myfile >> book1[i].aut_nationality >> book1[i].date >> book1[i].status;
cout << book1[i].id << "\ " << book1[i].title << "\ " << book1[i].p_name << "\ " << book1[i].p_address << "\ " << book1[i].aut_name;
cout << "\ " << book1[i].aut_nationality << "\ " << book1[i].date << "\ " << book1[i].status << endl;
i++;
}
myfile.close();
}
}
它应该输出包含什么文件,但是我在命令中得到了这个
111艾哈迈德·优素福哈哈15
222阿达斯·阿什··········································其中
0 0
前两行是正确的,但我不知道为什么它输出后2个零(0 0)
仅当某些输入失败后 ,条件while(myfile)
才会停止。
到那时,您已经从该输入尝试中打印了零。
每次尝试输入后,都必须检查myfile
的状态,以查看是否成功。
以及每次尝试输入后如何检查myfile的状态??!
您可以像这样修复循环:
void load_books(){
ifstream myfile(path);
if (myfile.fail()){
cout << "coudln't open file" << "\n\n";
}
else{
while (myfile >> book1[i].id >> book1[i].title >> book1[i].p_name
>> book1[i].p_address >> book1[i].aut_name
>> book1[i].aut_nationality >> book1[i].date >> book1[i].status){
cout << book1[i].id << "\ " << book1[i].title << "\ " << book1[i].p_name << "\ "
<< book1[i].p_address << "\ " << book1[i].aut_name << "\ "
<< book1[i].aut_nationality << "\ " << book1[i].date << "\ "
<< book1[i].status << endl;
i++;
}
}
}
由于std:istream& operator>>(std:istream&, T&)
的链接调用返回当前的std:istream&
引用,因此while()
循环中的条件可以解析为std::basic_ios::operator bool
,并且运算符评估为false
时,循环将结束。
相关参考文档:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.