Gubienie pozycji na liscie

0

Cześć,

Jest taki problem z kodem..... Jak wczytuje plik z danymi to jest świetnie, ale wszystko się psuje gdy muszę do listy jednokierunkowej dodać nowy element a dodanie polega na tym, że wszystkie elementy listy mają być uporządkowane rosnąco. Elementy w pliku dla ułatwienia są już uporządkowane rosnąco. Wszystko działa, rozrysowałem sobie nawet na kartce ale już nie mam pojęcia dlaczego on gubi ostatni element listy. Proszę o pomoc. Kod jest mieszany z C/C++

 
#include <iostream>
#include <stdio.h>
#include <conio.h>
#pragma warning(disable:4996)
using namespace std;

int ileRekordow = 0;


struct pojazd 
{
	char model[40];
	int rok_produkcji;
	float pojemnosc_silnika;
	struct pojazd *nast;
};
struct pojazd* dodawanie()
{
	struct pojazd *tmpPojazd=NULL;

	tmpPojazd = (struct pojazd*)malloc(sizeof(struct pojazd));
	
	cout << "Zaraz podasz dane nowego pojazdu. Przygotuj sie." << endl << endl;
	cout << "Podaj model samochodu: "; cin >> tmpPojazd->model; cout << endl;
	cout << "Podaj rok produkcji samochodu: "; cin >> tmpPojazd->rok_produkcji; cout << endl;
	cout << "Podaj pojemnosc silnika samochodu: "; cin >> tmpPojazd->pojemnosc_silnika; cout << endl;
	
	tmpPojazd->nast = NULL;

	cout<<"Model:"<< tmpPojazd->model<<" rok:" << tmpPojazd->rok_produkcji << " pojemosc:" << tmpPojazd->pojemnosc_silnika <<endl;
	
	return tmpPojazd;

}

void dodawanieDoListy(struct pojazd *poczatek, struct pojazd *nowy)
{

	struct pojazd *pomocnicza = NULL, *head = NULL;

	head = poczatek->nast;
	pomocnicza = poczatek;
	
	while(true)
	{
		
			
			if( (pomocnicza->rok_produkcji < nowy->rok_produkcji) && (nowy->rok_produkcji < head->rok_produkcji))
			{
				pomocnicza->nast = nowy;
				nowy->nast = head;
				break;
			}
			else if((head->nast == NULL) && (pomocnicza->rok_produkcji < nowy->rok_produkcji))
			{
				pomocnicza->nast = nowy;
				break;
			}
			else
			{
				pomocnicza = head;
				head = head->nast;
			}
	}
		
}


struct pojazd* uzupelnianieListy(FILE *odczytywanie)
{
	
	
	struct pojazd *poczatek = NULL,*nastepne_elementy = NULL;

	while (!feof(odczytywanie))
	{
		if (poczatek == NULL)
		{
			poczatek = nastepne_elementy = (struct pojazd*)malloc(sizeof(struct pojazd));
		}
		else
		{
			nastepne_elementy->nast = (struct pojazd*)malloc(sizeof(struct pojazd));
			nastepne_elementy = nastepne_elementy->nast;
		}

		fscanf(odczytywanie, "%s %d %f", nastepne_elementy->model, &(nastepne_elementy->rok_produkcji), &(nastepne_elementy->pojemnosc_silnika));
		cout << nastepne_elementy->model << endl;
		cout << nastepne_elementy->rok_produkcji << endl;
		cout << nastepne_elementy->pojemnosc_silnika << endl;

		cout << "\n";
		nastepne_elementy->nast = NULL;

		ileRekordow++;
		cout<< ileRekordow <<endl;

	}
	fclose(odczytywanie);//zamkniecie pliku

	system("pause");
	
	return poczatek;

}


int main()
{
	char wejscie[20], wyjscie[20];
	
	FILE* odczytywanie;
	FILE *zapisywanie;
	struct pojazd *poczatek = NULL;
	struct pojazd *nowy = NULL;
	struct pojazd *pomocniczy = NULL;


	cout << "Podaj nazwe pliku do odczytu: "; cin >> wejscie;
	odczytywanie = fopen(wejscie, "r");


	
	
	poczatek = uzupelnianieListy(odczytywanie);
	

	nowy = dodawanie();//wywolanie funkcji dodajacej nowy pojazd

	dodawanieDoListy(poczatek, nowy);

	pomocniczy = poczatek;

	cout << "*************************Nowa lista*********************" << endl;
	for(int i = 0; i < ileRekordow; i++)
	{
		
		cout << pomocniczy->model << endl;
		cout << pomocniczy->rok_produkcji << endl;
		cout << pomocniczy->pojemnosc_silnika << endl;

		pomocniczy = pomocniczy->nast;
		
	}
	cout << "*************************koniec Nowa lista*********************" << endl;
	
	
	_getch();
	return 0;
}

Plik do wczytania ma następującą postać:

Syrena 1977 650
Maluch 1999 3800
Polonez 2004 1774

0

Musisz rozrysować wszystkie warianty, już sama deklaracja:

void dodawanieDoListy(struct pojazd *poczatek, struct pojazd *nowy)

nie przewiduje dodania czegokolwiek na początek listy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1