2012-06-04 5 views
0

Привет, у меня есть список из 3-х интервалов, расположенных на 2 белых пробела, и я хочу их прочитать и создать объект. Я вставлю свой код из данных strucutre, class и pre/post. Я не могу найти причину ошибки. Любая помощь приветствуется:Чтение объекта из .in-файла

Class.h:

class RAngle{ 
private: 
    int x,y,l,b; 
    int solution,prec; 
    RAngle(){ 
     x = y = solution = prec = b = l = 0; 
    } 

    RAngle(int i,int j,int k){ 
     x = i; 
     y = j; 
     l = k; 
     solution = 0; prec=0; b=0; 
    } 

    friend ostream& operator << (ostream& out, const RAngle& ra){ 
     out << ra.x << " " << ra.y<<" " << ra.l <<endl; 
     return out; 
    } 

    friend istream& operator >>(istream& is, RAngle& ra){ 
     is >> ra.x; 
     is >> ra.y; 
     is >> ra.l; 

     return is ; 
    } 

}; 

dataStructure.h:

template <class T> 
class List 
{ 
private: 
    struct Elem 
    { 
     T data; 
     Elem* next; 
    }; 

    Elem* first; 

    void push_back(T data){ 
    Elem *n = new Elem; 
    n->data = data; 
    n->next = NULL; 
    if (first == NULL) 
    { 
     first = n; 
     return ; 
    } 
    Elem *current; 
    for(current=first;current->next != NULL;current=current->next); 
    current->next = n; 
} 

main.cpp:

void readData(List <RAngle> &l){ 
    *RAngle r; 
    int N; 
    ifstream f_in; 
    ofstream f_out; 

    f_in.open("ex.in",ios::in); 
    f_out.open("ex.out",ios::out); 

    f_in >> N; 
    for(int i=0;i<13;++i){ 
     f_in >> r; 
     cout << r; 
     l.push_back(r); 
    } 

    f_in.close(); 
    f_out.close(); 
}* 

входные данные:

3 1 2 
1 1 3 
3 1 1 

выход (при печати при чтении):

1 2 1 
1 3 3 
1 1 3 

Как вы можете видеть, как-то она начинает читать с позиции 2-го и заканчивается с первой.

+0

Является ли это совокупность коды? Твои классы, казалось, назывались странно; обычно файл, содержащий 'class Foo', называется' Foo.h' или 'Foo.cpp' и т. д. И хотя вы даете нам файл с именем' main.cpp', у вас нет функции 'main()'. – jedwards

ответ

1

Как вы можете видеть, как-то он начинает чтение с 2-го положения и заканчивается первым.

Это потому, что вы извлекаете первое значение.

В readData функции:

f_in >> N; // This line will extract the first value from the stream. 

// the loop starts at the second value 
for(int i=0;i<13;++i){ 
f_in >> r; 
    cout << r; 
    l.push_back(r); 
} 
+0

спасибо. я знаю, что fn >> N wil lcount мои строки, кажется, я был не прав: < –

1

Строка, которая читает f_in >> N, сначала считывает счет в переменную, но в вашем входном файле отсутствует этот счет. (Вернее, он видит первый «3» как счетчик, а это означает, что кортежи фактически начинаются с «1 2 1 ...»).

Смежные вопросы