[C++] wczytywanie z pliku do listy jednokierunkowej

herfoo
Użytkownik
Użytkownik
Posty: 103
Rejestracja: 10 paź 2006, o 21:36
Płeć: Mężczyzna
Lokalizacja: Iłża
Podziękował: 4 razy
Pomógł: 21 razy

[C++] wczytywanie z pliku do listy jednokierunkowej

Post autor: herfoo »

Witam czy jest mi ktoś w stanie wskazać błąd w moim kodzie ponieważ nie mogę dojść co jest nie tak. Funkcje działają dopuki ich nie zadeklaruje w mainie do wykonania. Mój poziom programowania jest niski także proszę o możliwie jasną wypowiedź:)

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <ctime>

using namespace std;

struct lista{
       int ile;
       char znak;
       lista *nastepny;
};

void wczytywanie(lista *&glowa)
{
     lista *aktualny, *ostatni;
     ostatni=aktualny=NULL;
     ifstream plik;
     plik.open("alfabet.txt");
     
     while(plik.eof())
     {
                      ostatni=aktualny;
                      aktualny = new lista;
                      plik>>aktualny->znak;
                      aktualny->nastepny=NULL;
                      if(ostatni==NULL)
                      {glowa=aktualny;}
                      else
                      ostatni->nastepny=aktualny;
     }
                      
     }
     
void drukowanie (lista *glowa)
{
     while(glowa!=NULL)
     {
     cout<<glowa->znak;
     glowa=glowa->nastepny;
     }
}


int main(int argc, char *argv[])
{
    lista *glowa;

wczytywanie(glowa);
drukowanie(glowa);


    system("PAUSE");
    return EXIT_SUCCESS;
}
Ostatnio zmieniony 5 cze 2011, o 12:07 przez Afish, łącznie zmieniany 1 raz.
Powód: Brak znaczników [code]
void_t
Użytkownik
Użytkownik
Posty: 103
Rejestracja: 14 maja 2011, o 18:25
Płeć: Mężczyzna
Pomógł: 26 razy

[C++] wczytywanie z pliku do listy jednokierunkowej

Post autor: void_t »

Zwróć uwagę na linię:

Kod: Zaznacz cały

while(plik.eof())
To wykona się tylko wtedy, gdy znajdziesz się na końcu pliku. Oprócz tego nie wiem z jakiegoż to powodu includujesz conio.h, cstdlib (żeby moc uzyć stałej EXIT_SUCCESS? jest warto? nie lepiej return 0?), ctime.
Ostatnio zmieniony 5 cze 2011, o 11:34 przez void_t, łącznie zmieniany 1 raz.
herfoo
Użytkownik
Użytkownik
Posty: 103
Rejestracja: 10 paź 2006, o 21:36
Płeć: Mężczyzna
Lokalizacja: Iłża
Podziękował: 4 razy
Pomógł: 21 razy

[C++] wczytywanie z pliku do listy jednokierunkowej

Post autor: herfoo »

poprawiłem i i tak nie pomaga:/ a to był faktycznie błąd
void_t
Użytkownik
Użytkownik
Posty: 103
Rejestracja: 14 maja 2011, o 18:25
Płeć: Mężczyzna
Pomógł: 26 razy

[C++] wczytywanie z pliku do listy jednokierunkowej

Post autor: void_t »

No fakt, u mnie się uruchomił, nie zwróciłem uwagi na błędy jakie wyrzucił valgrind. Co powiesz na to?

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <string>
#include <ctime>

using namespace std;

struct lista{
	int ile;
	char znak;
	lista *nastepny;
};

void wczytywanie(lista *&glowa)
{
	lista *aktualny, *ostatni;
	ostatni=aktualny=NULL;
	ifstream plik;
	plik.open("alfabet.txt");

	while(!plik.eof())
	{
		ostatni=aktualny;
		aktualny = new lista;
                /////////////////////////////////
                /// inicjalizacja zaalokowanej przestrzeni
		aktualny->znak = 0;
		aktualny->nastepny = NULL;
		aktualny->ile = 0;

		plik >> aktualny->znak;
		
		aktualny->nastepny=NULL;
		if(ostatni == NULL)
			glowa=aktualny;
		else
			ostatni->nastepny=aktualny;
	}
}

void drukowanie(lista *glowa)
{
	while (glowa != NULL) {
		cout << glowa->znak;
		glowa = glowa->nastepny;
	}
}

int main(int argc, char *argv[])
{
lista *glowa;

wczytywanie(glowa);
drukowanie(glowa);

return 0;
}
herfoo
Użytkownik
Użytkownik
Posty: 103
Rejestracja: 10 paź 2006, o 21:36
Płeć: Mężczyzna
Lokalizacja: Iłża
Podziękował: 4 razy
Pomógł: 21 razy

[C++] wczytywanie z pliku do listy jednokierunkowej

Post autor: herfoo »

ale to przecież zawsze najpierw będe miał zero przed każdym wczytanym znakiem a to jest bez sensu trochę czyż nie? Tutaj chodzi o zbudowanie programu ktory bedzie analizowal liczbe znakow w tekscie i chce najpierw zrobic to za pomoca listy z ktorej wczytuje sobie znaki a potem je z ta lista porownywac bo tak wydaje mi sie jest najprosciej

-- 5 czerwca 2011, 11:45 --

A może to wina czegoś w systemie, kompilatora cokolwiek bo dalej mi się nie odpala a mówisz, że u ciebie działa wszystko i jest okej. Mam plik tekstowy w tym samym folderze to przecież nie muszę mu podawać ścieżki-- 5 czerwca 2011, 12:57 --Moim zdaniem problem jest tutaj coś z plikiem ponieważ jeżeli zrobiłem te funkcje na znakach wpisywanych z klawiatury to wszystko działa idealnie. Czy widzi ktoś jakiś błąd w deklaracji pliku? Czy może to błąd Deva
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C++] wczytywanie z pliku do listy jednokierunkowej

Post autor: wawek91 »

A wrzuć po open

Kod: Zaznacz cały

if(plik.good()) cout << "udalo sie";
i sprawdź czy Ci wogóle otwiera plik. Druga sprawa czy ten plik 'alfabet.txt' masz w tym samym katalogu co program główny? Trzecia sprawa jak masz zapisany plik? Jeśli jest on zapisany jako 'alfabet.txt' to raczej go nie otwiera, trzeba nazwać go 'alfabet', a jego rozszerzenie niech pozostanie jako .txt.
ODPOWIEDZ