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