繁体   English   中英

C ++程序读取文件

[英]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的状态,以查看是否成功。

充实@Bo的答案 ,并回答您的评论

以及每次尝试输入后如何检查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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM