2014-08-30 7 views
-1
#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 
#include <algorithm> 
#include <vector> 
using namespace std; 

class student 
{ 
    public: 
    string s; 
    int age; 
}; 

ostream& operator<<(ostream &output,const student &s) 
{ 
     output << s.s << " " << s.age << "\n"; 
     return output; 

} 

istream& operator >>(istream& in, student& val) 
{ 
    return in >> val.s >> val.age; 
} 


bool valuecmp(const student & a, const student & b) 
{ 
    return a.s < b.s; 
} 

int main (void) 
{ 
    vector<student> a; 
    student b; 
    cin>>b.s; 
    cin>>b.age; 
    fstream myfile; 
    myfile.open("a1.txt",ios::app); 
    int i = 0; 
    myfile << b; 
    cout<<"File has been written"<<"\n"; 
    myfile.open("a1.txt",ios::in); 
    for (string line; getline(myfile, line);) 
    { 
     istringstream stream(line); 
     student person; 
     stream >> person; 
     a.push_back(person); 
     cout<<a[i].s<<a[i].age<<"\n"; 
     i++; 
    } 
    sort(a.begin(),a.end(),valuecmp); 
    fstream my; 
    my.open("a2.txt",ios::out); 
    student c; 
    for (i = 0; i < 2; i++) 
    { 
     cout<<a[i].s<<a[i].age<<"\n"; 
     c = a[i]; 
     my << c; 
    } 
    return 0; 
} 

Простая программа для приема пользовательского ввода, хранения в объекте. Перед запуском этой программы у меня есть несколько входов. Поэтому, когда я заставил эту программу принять входные данные от пользователя, напишите в файле, а затем отсортируйте содержимое всего файла, используя операцию сортировки и затем напишите отсортированный вывод в новом файле.Почему я вижу ошибку seg в этом?

Принимает пользовательский ввод, показывает сообщение, File has been written, но затем показывает ошибку seg. Почему это происходит?

+2

Ну, вы запустили код через отладчик, чтобы узнать, что именно бросает исключение? – OldProgrammer

+3

Вы не закрываете файл после того, как вы его написали, затем попытайтесь его снова открыть. Закройте файл и добавьте некоторую проверку ошибок. –

+2

Почему ваш последний цикл игнорирует размер? –

ответ

-1

Вы получаете Segfault на этой линии

cout<<a[i].s<<a[i].age<<"\n"; 

потому a пуст, когда вы пытаетесь получить к нему доступ. a.push_back(person) никогда не вызывается, поэтому данные не добавляются к вашему вектору. getline() не удалось выполнить первый раз.

Надеюсь, это приведет вас в полезном направлении.