2010-10-01 2 views
1

Итак, я пытаюсь прочитать этот файл. Все выглядит так, как будто оно должно работать, но во время работы программа отключается и перестает работать, и я должен ее закрыть. Что происходит? Я подозреваю, что тест oef() никогда не возвращает true, и он продолжает искать больше в файле. У меня нет перетаскивания пустых строк в текстовый файл. Я пробовал отлаживать это как сумасшедший. Я не могу найти ничего плохого, но он все еще отказывается работать.Проблема C++ eof() - никогда не возвращается 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 

Любые предложения?

ответ

1

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

EDIT: попробуйте этот код:

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

Да, я знаю, что это, вероятно, не решит проблему, но информации недостаточно для анализа. Определение темп? Если вы отламываете отладчик, где он останавливается? – ybungalobill

+1

Могу я вместо этого поставить: while (getline (textFile2, temp)? Также: я добавил дополнительное отсутствующее содержимое – NateTheGreatt

+0

Да, вы можете: Btw ваша программа останавливается на моем компьютере. Как вы решили, что он никогда не возвращается из цикла? – ybungalobill

0

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

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

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