C ++ eof () проблема - никогда не возвращает истину? - PullRequest
1 голос
/ 01 октября 2010

Итак, я пытаюсь прочитать этот файл.Все выглядит так, как будто оно должно работать, но во время выполнения программа перестает работать и перестает работать, и мне приходится ее закрывать.Что здесь происходит?Я подозреваю, что тест oef () никогда не возвращает true и продолжает искать в файле больше.У меня нет перетаскивания пустых строк в текстовом файле.Я пытался отладить это как сумасшедший.Я не могу найти ничего плохого, но он все равно отказывается работать.

Pet** petArray;

ifstream textFile2;
textFile2.open("pets.txt");

int i = 0;
string temp;
int tmpNum = 0;

if (textFile2.is_open())
{
    while (!textFile2.eof())
    {

        getline(textFile2, temp);

        petArray = new Pet*[arraySize];

        if (temp == "Dogs" || temp == "Cats" || temp == "Iguanas" || temp == "Pigs")
        {
            if (temp == "Dogs") tmpNum = 0;
            if (temp == "Cats") tmpNum = 1;
            if (temp == "Iguanas") tmpNum = 2;
            if (temp == "Pigs") tmpNum = 3;
            temp == "";
        }
        else
        {
            if (tmpNum == 0)
            {
                petArray[i] = new Dog(temp);
                cout << "Dog " << temp << " added" << endl;
            }
            if (tmpNum == 1)
            {
                petArray[i] = new Cat(temp);
                cout << "Cat " << temp << " added" << endl;
            }
            if (tmpNum == 2)
            {
                petArray[i] = new Iguana(temp);
                cout << "Iguana " << temp << " added" << endl;
            }
            if (tmpNum == 3)
            {
                petArray[i] = new Pig(temp);
                cout << "Pig " << temp << " added" << endl;
            }
            arraySize++;
        }

        i++;
    }
}

Вот формат текстового файла:

Dogs
d1
d2
Cats
c1
c2
Iguanas
i1
i2
Pigs
p1
p2

Есть предложения?

Ответы [ 2 ]

1 голос
/ 01 октября 2010

eof возвращает true после , когда вы пытались что-то прочитать, и операция не удалась.Так что ставьте его после getline.

РЕДАКТИРОВАТЬ: попробуйте этот код:

vector<Pet*> petArray;
ifstream textFile2("pets.txt");

string temp;
int tmpNum = 0;

while (getline(textFile2, temp))
{
    if (temp == "Dogs") tmpNum = 0;
    else if (temp == "Cats") tmpNum = 1;
    else if (temp == "Iguanas") tmpNum = 2;
    else if (temp == "Pigs") tmpNum = 3;
    else
    {
        if (tmpNum == 0)
        {
            petArray.push_back(new Dog(temp));
            cout << "Dog " << temp << " added" << endl;
        }
        if (tmpNum == 1)
        {
            petArray.push_back(new Cat(temp));
            cout << "Cat " << temp << " added" << endl;
        }
        if (tmpNum == 2)
        {
            petArray.push_back(new Iguana(temp));
            cout << "Iguana " << temp << " added" << endl;
        }
        if (tmpNum == 3)
        {
            petArray.push_back(new Pig(temp));
            cout << "Pig " << temp << " added" << endl;
        }
    }
}
0 голосов
/ 02 октября 2010

Что ты имеешь в виду, что он не работает? То, как это написано, будет пытаться прочитать на одну строку больше, чем вы ожидаете.

Это потому, что когда читается последняя строка, getline еще не нажал eof, но при попытке прочитать строку, после последней, будет нажата eof. Так что это может быть вашей проблемой.

...