2014-02-14 3 views
0

Эта функция должна открыть файл .txt так:не удается прочитать из файла все целые строки (ifstream)

1 4 5 

2 4 6 

и т.д. (с вкладки между номерами)

и сохранить каждый номер в одной переменной

void Graph::readData(char* fname) 
{ 
    //cout<<"1"; 
    int x,y,w;//assistant variables 
    ifstream input;//stream for reading file 
    input.open(fname,ios::in); 
    if(!input) 
    { 
     cerr<<"Input file doesn't exist"<<endl;//error if file doens exist 
    } 
    else 
    { 
     cout<<"Input file opened"<<endl; 
     cout<<"Reading Data from file..."<<endl; 
     while(!input.eof())//till the end of file 
     { 
      input>>x>>y>>w;//reads the links-site 
      cout<<"x: "<<x<<"y:"<<y<<"w: "<<w<<endl; 
      insertLink(x,y,w);//inserts them 

     } 
     input.close();//closing file 
    } 
} 

Однако, когда я «COUT» результаты я получаю что-то вроде этого:

x=1 y= w=5 

x=2 y= w=6 

без y!

Почему это могло случиться?

PS: Кроме того, eof() становится истинным после завершения файла (читает одну дополнительную строку). Как я могу остановить пока итерация правильно?

Это файл, я пытаюсь читать: http://www.speedyshare.com/tpvuD/input.txt

+0

Что касается вашего PS: [Почему 'iostream :: eof' внутри условия цикла считается неправильным?] (Http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition -considered-wrong) – WhozCraig

+1

Помимо проверки 'eof', код должен работать, а это значит, что ошибка указана в коде, который вы нам не показываете, или что входной файл не в том формате, который вы сказали. – jrok

+0

«... когда I 'cout« результаты ... », эти результаты не выводятся из выходного цикла в этом опубликованном коде. Во-первых, у опубликованного кода есть двоеточия (':'), а не равно ('='). Независимо от того, что вы утверждаете, это неправильный вывод, это не из этого цикла. Мой хрустальный шар подсказывает мне код, который * * пишет ваш вывод, никогда не отправляет y-значение в выходной поток, но не видя * реального * кода, его невозможно сказать наверняка. [Этот цикл работает] (http://ideone.com/UXZ6I9) после исправления ошибочного while-condition. – WhozCraig

ответ

1

Чтобы остановить итерации правильно, написать цикл, как:

while(input>>x>>y>>w)//till the end of file 
{ /* ... */ } 

Не проверять input.eof().

+0

А что, если у меня есть что-то вроде этого: (! file.eof()) то время как { если (...) { входа >> х; } еще { входа >> х >> y >> w; } } – syfantid

+0

Затем 'while (input >> x) {if (...) {...} else {input >> y >> w; ...}' – timrau

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