2017-02-21 7 views
1
using namespace std; 

struct WebSites 
{ 
    string siteName; 
    int rank; 

    string getSiteName() { return siteName; } 
    int getRank() { return rank; } 
    WebSites(string const&, int); 
    WebSites(); 
}; 

WebSites::WebSites(string const& siteName, int rank) { 
    this->siteName = siteName; 
    this->rank = rank; 

} 

WebSites::WebSites() {} 

ostream& operator << (ostream& stream, WebSites const& data) { 
    stream << data.rank << " " << data.siteName.size() << " " << data.siteName<< endl; 
    return stream; 

} 

istream& operator >> (istream& stream, WebSites data) { 
    stream >> data.siteName >> data.rank; 
    return stream; 

} 


int main() { 

    WebSites s1("www.google.co.uk", 1); 

    //write to file 

    ofstream writer("chou.dat", ios::out | ios::binary); //i'll add ios::app later 
    if (!writer) { 
     cout << " error opening file " << endl; 
     return -1; 
    } 
    else { 
     writer << s1.getSiteName() << " " << s1.getRank() << endl; 
    } 
    writer.close(); 

    //read file 
    fstream writerR("chou.dat", ios::binary | ios::in | ios::ate); 
    WebSites read; 
    while (writerR >> read) { 

     cout << read.siteName << " rank: "<< read.rank << endl; 
    } 
    writerR.close(); 
    return 0; 
} 

このプログラムがファイルを読み込んでコンソールに表示されない理由を教えてもらえますか?私はそれが完全に書いているということです。私はものを変えようとしましたが、何も働かなかったので、私は同様のコードをオンラインでチェックしましたC++ファイルI/O .datファイルを読み取ることができません

+0

' fstreamのwriterR' <:この二番目のパラメータを解決するために参照すべきですか? –

+0

なぜ読み込みストリーム 'writeR'を呼び出すのですか?それを「リーダー」と呼ぶのはなぜですか? – NathanOliver

+0

これが問題であるかどうかはわかりませんが、ios :: ateをopenに渡して、ファイルを最後まで探します。ファイルの最後から何も読み込む必要はありません。また、私は、入力ファイルストリーム(ifstream)を使用する方が良いと仮定し、それぞれのフィールドを別々に書き込む場合、あなたがしようとしているような構造体全体を読み取ることはできません。バイナリモードを指定しても、テキストをダンプするように動作します。私が見ているように、このコードは1つではなく2つの問題を持っています。 –

答えて

0

は、いくつかの問題があります。

  1. Accouding docs

    がすぐに開い

    後、ストリームの終わりに求めるでしょうios::ateを指定するので、単純に読むことは何もありませんあなたのwhileループは決して入力されません。

  2. もう一つの問題はここにある:operator >> (istream& stream, WebSites data)

    あなたのオペレータは、データにコピーを充填されます。 - これは読書のためであれば、なぜ `ifstream`

    operator >> (istream& stream, WebSites& data)

+0

私は2番目のパラメータを参照にしたことを理解していますが、まだ動作しません。 – choudhry

+0

何らかの理由で訂正を行いました。まだ動作していません... – choudhry

+0

あなたの訂正を、正しく...... – choudhry

関連する問題