So I'm trying to read this file. Everything looks like it should work, but during runtime the program times out and stops working, and I have to close it. What is going on? I suspect that the oef() test is never returning true and it keeps looking for more in the file. I have no dragging empty lines in the text file. I've tried debugging this like crazy. I can't find anything wrong but it still refuses to work.
Pet** petArray;
ifstream textFile2;
textFile2.open("pets.txt");
int i = 0;
string temp;
int tmpNum = 0;
if (textFile2.is_open())
{
while (!textFile2.eof())
{
开发者_Go百科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++;
}
}
Here is the format of the text file:
Dogs
d1
d2
Cats
c1
c2
Iguanas
i1
i2
Pigs
p1
p2
Any suggestions?
eof
returns true after you tried to read something and the operation failed. So put it after getline
.
EDIT: try this code:
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;
}
}
}
What do u mean that it is not working? The way this is written, this will try to read one line more,than you expect.
This is because, when the last row is read, getline is not hit eof
yet, but when try to read the line, after the last, then will hit eof
. So, this may be your problem.
精彩评论