Как вы читаете отдельные строки целых чисел из файла, игнорируя отдельные строки с одним символом? - PullRequest
0 голосов
/ 16 октября 2019

Я работаю над программой, работающей с деревьями двоичного поиска. У меня есть простой текстовый файл, который выглядит следующим образом:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
$
5 4 3 5 7 13
$
11 6 7 2 12 6

Первая строка содержит целые числа для вставки в дерево, третья строка - целые числа для поиска, а пятая строка - целые числа для удаления,Вторая и четвертая строки предназначены для обозначения разделения других линий. Они содержат один символ «$». Я борюсь с тем, как игнорировать вторую и четвертую строчки. У меня есть три цикла while, разделенных двумя операторами игнорирования. После тестирования кажется, что второй и третий циклы while никогда не вводятся. Буду признателен за любую помощь - мой код ниже.

#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include "main.h"


int main(int argc, char *argv[])
{    
    string filename = "";
    ifstream inFile;

    filename = argv[1];
    inFile.open(filename.c_str());

    BST b;
    int num;

    while(inFile >> num)
    {
       b.insert(num);
       cout << num << endl; //output testing - the first line was successfully output so I think this part is fine
    }

    inFile.ignore(500, '$');

    while(inFile >> num) //this while loop is never entered
    {
        b.search(num);
    }
    inFile.ignore(500, '\n');

    while(inFile >> num) //this while loop is never entered
    {
        b.remove(num);
    }

    inFile.close();  
}

1 Ответ

1 голос
/ 17 октября 2019

Когда вы закончите с циклами, которые читают числа, добавьте строку, чтобы очистить состояние ошибки входного потока. Без этого никакие последующие операции чтения не выполняются.

while(inFile >> num)
{
   b.insert(num);
   cout << num << endl; //output testing - the first line was successfully output so I think this part is fine
}

inFile.clear();           // ADD THIS LINE
inFile.ignore(500, '$');

while(inFile >> num) //this while loop is never entered
{
    b.search(num);
}

inFile.clear();           // ADD THIS LINE
inFile.ignore(500, '\n');
...