Запись и печать дополнительных 0 для отсортированных файлов и вырезания узла (односвязный список) с конца C ++ - PullRequest
0 голосов
/ 02 мая 2011

Это может показаться немного расплывчатым, поэтому очень жаль. Я пишу в файл и печатаю на консоль отсортированные узлы в этом односвязном списке. К сожалению, в списке сортировки он печатает и записывает дополнительный 0 в начале и обрезает значение до конца. Вот код:

void SLLIntStorage::Read(istream& r)
{
    char c[13];
    r >> c;
    r >> numberOfInts;

    head = new Node;
    head->next = NULL;
    tail = head;
    r >> head->data;

    for (int i = 0; i < numberOfInts; i++)
    {
        Node* newNode = new Node;
        r >> newNode->data;

        if(_sortRead)
        {
            if(newNode->data > tail->data)
            {
                tail->next = newNode;
                tail = newNode;
            }
            else if(head->data > newNode->data)
            {
                newNode->next = head;
                head = newNode;
            }
            else
            {
                current = head;

                while(current->next != NULL)
                {
                    if(current->next->data > newNode->data)
                    {
                        newNode->next = current->next;
                        current->next = newNode;
                        break;
                    }
                    else
                    {
                        current = current->next;
                    }
                }
            }
        }
        else
        {
            tail->next = newNode;
            tail = newNode;
        }
    }
    print();
}

void SLLIntStorage::Write(ostream& w)
{
    current = head;

    for(int i = 0; i < numberOfInts; i++)
    {
        w << current->data << endl;

        if (current->next != NULL)
            current = current->next;
    }
}
void SLLIntStorage::print()
{
    current = head;

    for(int i = 0; i < numberOfInts; i++)
    {
        cout << current->data << endl;
        //system("pause");
        if(current->next != NULL)
        {
            current = current->next;
        }
    }
}

Пример файла: 0 0 1 2 2 3 ........ 9995 9996 9996 9998 // здесь должно быть еще 9998

1 Ответ

0 голосов
/ 02 мая 2011

Кажется, вы читаете одну запись слишком много. Сначала вы читаете запись в строке r >> head->data; непосредственно перед циклом for. Затем вы читаете дополнительные numberOfInts записи в for -цикле, в общей сложности numberOfInts+1 записей.

...