Hallo Zusammen Hier mal ein Quellcode zum jeweiligen Namen gehört eine Punktezahl, und es soll aufsteigend sortiert werden. Es läuft soweit, allerdings erden immer nur die Zahlen und nicht der Name ausgegeben...was mache ich falsch ? PS bin noch Anfänger:-) int main() { int kai,uwe,heinz; uwe=11; heinz=4; kai=21; int array[3] = {kai,uwe,heinz}; int x; for (int y=1; y<3; y++) { for(int z=0;z<3-1;z++) { if (array[z]>array[z+1]) { x = array[z]; array[z]=array[z+1]; array[z+1] = x; } } } for(int y=0;y<3;y++) printf("%i,",array[y]); return 0; }
:
Verschoben durch Moderator
Neuling schrieb: > Hallo Zusammen > > Hier mal ein Quellcode zum jeweiligen Namen gehört eine Punktezahl, und > es soll aufsteigend sortiert werden. Es läuft soweit, allerdings erden > immer nur die Zahlen und nicht der Name ausgegeben...was mache ich > falsch ? Du hast vergessen, das C-Buch zu lesen. Kurz nachholen und alles läuft!
int array[3] = {21,11,4}; macht das selbe und macht den falsch funktionierenden Code übersichtlicher
Safari schrieb: >>printf("%i,",array[y]); > wird zu > > printf("%s,",array[y]); Wenns denn ein char* wäre sicher, aber so ?
Neuling schrieb: > PS bin noch Anfänger:-) Merkt man... Tipp: Alles schon zusammengehörig in Strukturen stopfen, die Strukturen in ein Array und dann z.B. qsort() drauf los lassen. https://www.tutorialspoint.com/c_standard_library/c_function_qsort.htm
Das funktioniert grundsätzlich so nicht. kai,uwe,heinz sind in dem Code Variablen und keine Texte. Das Array int array[3] = {kai,uwe,heinz}; enthält darum einfach die Zahlen und keine Namen. Genau genommen sieht dein Mikrocontroler die Begriffe "kai", "uwe" und "heinz" nie weil der sogenannte Compiler der aus C, Maschinencode macht, einfach die Werte verwendet, und keine von dir benannten Variablen. In der Tat fehlen dir Grundlagen. Der Tipp mit den Structs ist nicht schlecht. Du brauchst eine Datenstruktur in die du einerseits den Wert abspeicherst aber ebenso den Namen des Wertes (als char* welches in C Texte aufnehmen kann.). Dadurch sind diese beiden Dinge untrennbar miteinander verbunden und können bei Bedarf abgerufen werden.
:
Bearbeitet durch User
Hi, Oben dazu: const char* name[] = {"Kai", "Uwe", "Heinz" }; printf ändern: printf("%s: %i, ",name[y], array[y]); Gruß N2
N2 schrieb: > Oben dazu: > const char* name[] = {"Kai", "Uwe", "Heinz" }; > > printf ändern: > > printf("%s: %i, ",name[y], array[y]); Du hast aber gesehen, dass das Werte-Array umsortiert wurde? Mit diesem Code werden die Namen aber nicht mit umsortiert.
http://www.gnu.org/software/libc/manual/html_node/Searching-and-Sorting.html#Searching-and-Sorting Du brauchst aber eine Funktion die den Vergleich an sich durchführt... http://www.gnu.org/software/libc/manual/html_node/Comparison-Functions.html#Comparison-Functions so geht es aber auch... https://stackoverflow.com/questions/20519293/optimized-bsort-in-c allerdings würde ich mich als Anfänger an die Standard Funktionen halten. Ich würde auch eine Struktur benutzen um die Punktzahl einen Namen zuordnen zu können.
1 | struct spieler { |
2 | |
3 | char name[64]; |
4 | int punkte; |
5 | }
|
6 | |
7 | Denn du musst ja die Punkte mit den Namen sortieren. |
:
Bearbeitet durch User
Hi, Hab ich nicht dran gedacht... Aber ein bisschen nachdenken darf der TO auch :) Alles sinnvoll in ne Struct und die Struct sortieren... Gruss
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.