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