0

ファイルの読み取りエラーと思われる宿題を提出しました。明らかな理由から、割り当てのすべてのコードを投稿したくありません。私たちは春休み中で、数週間以内に教授からフィードバックを受け取るかもしれません. 私はいつもファイルを読むのに苦労しているように見えるので、今週時間があるうちに物事を理解したい.

割り当ての要点は、文字列 "gift" を含む STL セット コンテナーと、データ メンバーとして名前を含む文字列を持つ単純な人物オブジェクトを作成することです。次に、それらのオブジェクトのセットを用意します。プログラムの最初の側面は、次の形式のファイルを読み取ることです。行の最初の単語は常に名前であり、引用符の間にあるのはギフトのアイデアです。

Tom     "iphone"
Bill    "guitar"
Bill    "pencils"
Steve   "speaker"
Mary    "tennis racket"
Jenny   "golf balls"
John    "printer"
Bill    "books"
Mary    "books"

画面に出力する場合、フォーマットは次のようになります。

Bill    books, guitar, pencils
Jenny   golf balls
John    printer
Mary    books, tennis racket
Steve   speaker
Tom     iphone

ビジュアルスタジオでは、すべて問題ありません。しかし、gcc でコンパイルして実行すると、出力は次のようになります。

, pencilsooks
Jenny   golf balls
John    printer
Mary    books, tennis racket
Steve   speaker
Tom     iphone

数日間休みを取り、readfile 関数を調べたところ、うまく記述されていない関数であることに気付きました。そうは言っても、VSでデバッグすると、すべてがうまくいくようです。学校で Linux サーバーに接続して gcc でテストすると、問題が発生しますが、VS で行うように Linux でデバッグする方法がわかりません (学ぶ必要があります)。

とにかく、ここに私のreadfile関数があります:

//library facilities used: fstream, assert
//Postcondition: set of person objects have been created from file
void read_file(const char* file_name, set<person> &list)
{
    ifstream infile;
    infile.open(file_name);
    assert(infile);
    while( infile.good() )
    {
        string tmp_name; //stores name from file
        string tmp_gift; //stores gift from file
        person p_tmp;     //to be added to person_list
        set<person>::iterator people_iter; 

        infile >> tmp_name;//get 1st name in file

        //check to see if it's in the set of people
        if( in_list(tmp_name, list) )
        {
            getline(infile, tmp_gift, '\n'); //get the gift
            strip_punct(tmp_gift);
            add_to_existing(tmp_name, tmp_gift, list);
        }
        else //name is not in list
        {
            p_tmp.set_name(tmp_name);//set the name
            getline(infile, tmp_gift, '\n'); //get the gift
            strip_punct(tmp_gift);// get rid of quotes and other puncts
            p_tmp.insert_gift(tmp_gift);  //insert gift string into set of gifts for that person
            people_iter = list.begin();//add person to list of people
            list.insert(people_iter, p_tmp);    
        }//end else

    }// end while( infile.good() )

    infile.close();

}//end read_file
4

0 に答える 0