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