سؤال

لذلك أحاول قراءة هذا الملف. يبدو أن كل شيء يجب أن ينجح ، ولكن خلال فترة التشغيل ، يعود البرنامج إلى الخارج ويتوقف عن العمل ، ويجب أن أغلقه. ما الذي يجري؟ أظن أن اختبار OEF () لا يعود أبدًا بشكل صحيح ويستمر في البحث عن المزيد في الملف. ليس لدي أي أسطر فارغة في الملف النصي. لقد حاولت تصحيح هذا مثل الجنون. لا يمكنني العثور على أي شيء خاطئ ولكنه لا يزال يرفض العمل.

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

أي اقتراحات؟

هل كانت مفيدة؟

المحلول

eof يعود صحيح بعد حاولت قراءة شيء وفشلت العملية. لذا ضعها بعد 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;
        }
    }
}

نصائح أخرى

ماذا تعني أنه لا يعمل؟ الطريقة التي يتم بها كتابة هذا ، سيحاول قراءة سطر واحد أكثر مما تتوقع.

هذا لأنه عندما تتم قراءة الصف الأخير ، لا يتم ضرب GetLine eof ومع ذلك ، ولكن عندما حاول قراءة الخط ، بعد الماضي ، سوف يضرب eof. لذلك ، قد تكون هذه مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top