• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ - ładowanie danych z pliku do listy

Object Storage Arubacloud
0 głosów
266 wizyt
pytanie zadane 30 października 2021 w C i C++ przez letmestay Użytkownik (520 p.)

Cześć. Za zadanie mam ułożenie danych z pliku tekstowego do listy jednokierunkowej. Wszystko okej, tworzę strukturę i próbuje załadować pliki po kolei do odpowiednich kategorii.

int main()
{
	
	struct node* head = NULL, * tmp = NULL;
	
	ifstream myFile;
	myFile.open("eurovision.txt");
	if (!myFile.good()){
		cout << "Something went wrong" << endl;
		return 0;
	}
	
	tmp = new struct node;
	head = tmp;

	while (myFile >> tmp->year >> tmp->country >> tmp->song >> tmp->name >> tmp->language) {
	
		tmp->next = NULL;
		tmp = tmp->next;
		tmp = new struct node;
		
	}

	for (tmp = head; tmp; tmp = tmp->next) {
		cout << tmp->year << " " << tmp->country << " " << tmp->song << " " << tmp->name << " " << tmp->language << endl;
	}

	return 0;
}

Problem jest taki, że poprawnie wyświetla mi się pierwsza linijka, wszystko tk jak powinno, ale na tym się kończy. Kolejne linijki już nie są wyświetlane. Rozumiem, że problem jest w tej pętli while? Zdaję się, że na końcu tworzę jeden nowy pusty element, ale głowie się już kilka godzin i nadal nie wiem jak mogę to zmienić

komentarz 30 października 2021 przez j23 Mędrzec (194,920 p.)

tmp = new struct node;

To nie C, wystarczy tmp = new node;

komentarz 30 października 2021 przez letmestay Użytkownik (520 p.)
Racja, dziękuje bardzo za podpowiedź

1 odpowiedź

+1 głos
odpowiedź 30 października 2021 przez overcq Pasjonat (21,650 p.)
wybrane 30 października 2021 przez letmestay
 
Najlepsza

Wewnątrz pętli while ustawiasz następny element na NULL zamiast nadać mu wartość przydzielonej pamięci.

I oczywiście trzeba też usuwać nadmiarowy element na końcu. Alternatywą jest użycie zmiennych lokalnych zamiast przypisywania danych od razu do struktury.

komentarz 30 października 2021 przez letmestay Użytkownik (520 p.)
Okej, w takim razie usuwam nadmiarowy element na końcu, ale nadal nie rozumiem jak mam nadać jakąś wartość w takiej sytuacji, co ma być tą wartością :(
komentarz 30 października 2021 przez overcq Pasjonat (21,650 p.)

Zobacz, co się dzieje linia po linii w następującym fragmencie:

tmp->next = NULL;
tmp = tmp->next;
tmp = new struct node;

Co jest na początku i co zostaje na końcu w strukturze tmp i w której, we wcześniejszej i w nowo utworzonej.

komentarz 30 października 2021 przez j23 Mędrzec (194,920 p.)

@letmestay, głównym problemem jest to, że w prawdzie tworzysz obiekty node dla każdej pozycji w pliku, ale nie łączysz ich w listę, dlatego masz tylko jeden wpis, bo ten przypisujesz na początku do head.

komentarz 30 października 2021 przez letmestay Użytkownik (520 p.)
Udało się i usunąć i ładnie załadować :) Dziękuje za pomoc

Podobne pytania

0 głosów
1 odpowiedź 438 wizyt
pytanie zadane 29 grudnia 2015 w C i C++ przez martix3 Użytkownik (690 p.)
0 głosów
1 odpowiedź 1,737 wizyt
pytanie zadane 12 maja 2017 w C i C++ przez AndekQR Użytkownik (880 p.)
0 głosów
0 odpowiedzi 443 wizyt

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...