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

Problem z sortowaniem danych zawartych w strukturach.

VPS Starter Arubacloud
0 głosów
148 wizyt
pytanie zadane 27 czerwca 2018 w C i C++ przez Piotr Lis Obywatel (1,310 p.)

Witam,

Zacząłem pisać program mający wyświetlać wyniki graczy oraz ich nicki od najlepszego do najgorszego, w oparciu o struktury (bez gry - to ćwiczenie z ksiązki Alexa Allaina), ale napotkał mnie problem z algorytmem sortującym. Otóż petla zatrzymuje się w jedym miejscu i powtarza tylko tą jedną linie kodu, czego wynkiem jest czarny ekran w konsoli:

#pragma region Sorting

	int fTheLowestValue(Player player[], int q, int index)//int q = 5
	{
		for (int i = index + 1; i < q; i++)
		{
			if (player[i].score > player[index].score)
			{
				i = index;  //tu zatrzymuje się program
			}
		}
		return index;
	}

	void change(Player player[], int index, int index2)
	{
		int buffer = player[index].score; 
		player[index].score = player[index2].score;
		player[index2].score = buffer;
	}

	void sort(Player player[], int q)//int q = 5
	{
		for (int i = 0; i < q; i++)
		{
			int index = fTheLowestValue(player, q, i);
			change(player, i, index);
		}
	}

#pragma endregion

Nie mam pojęcia co może być problemem, z góry więc dziekuję za odpowiedź!

1 odpowiedź

+1 głos
odpowiedź 27 czerwca 2018 przez RafalS VIP (122,820 p.)
wybrane 27 czerwca 2018 przez Piotr Lis
 
Najlepsza

Bardzo logiczne, że sie zatrzymuje. Jeśli za player[index] znajduje sie co najmniej jeden większy lub równy player to:

-znajdujesz >= playera
-cofasz iteracje spowrotem do index
-znowu znajdujesz tego samego playera
-cofasz iteracje spowrotem do index
-zno....

Naucz się debugować, jeśli nie z pomocą jakiegoś sprytnego narzędzie to rób zwykłe couty np w ten sposób:

        for (int i = index + 1; i < q; i++)
        {
            cout<<"i = "<<i<<endl;
            if (player[i].score > player[index].score)
            {
                cout<<"znalazłem >=, przypisuje "<<index<<" do i"<<endl;
                i = index;  //tu zatrzymuje się program
            }
        }

 

komentarz 27 czerwca 2018 przez Hiskiel Pasjonat (22,830 p.)
Mogę wspomnieć o std::qsort? :P
komentarz 27 czerwca 2018 przez mokrowski Mędrzec (155,460 p.)
Ale qsort jest takie... "niemęskie" :) Lepiej jeść schabowego pałeczkami do sushi. To bardziej hipsterskie :)

żart..

Podobne pytania

0 głosów
1 odpowiedź 223 wizyt
pytanie zadane 18 grudnia 2019 w C i C++ przez maj005 Początkujący (300 p.)
0 głosów
1 odpowiedź 1,033 wizyt
0 głosów
1 odpowiedź 152 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...