Byte_Breaker Geschrieben 30. Juli 2007 Geschrieben 30. Juli 2007 Hallo, könnt ihr mir beim Fehlersuchen helfen, bzw. erklären, warum dieses Programm so abläuft. Mein Programm: #include <stdio.h> #include <conio.h> void fillarray(); void showarray(); void sortarray(); int exchange(int i, int j); char a[5][15]; main() { clrscr(); fillarray(); showarray(), sortarray(); showarray(); getch(); } void fillarray() { strcpy(a[0],"a"); strcpy(a[1],"b"); strcpy(a[2],"c"); strcpy(a[3],"d"); strcpy(a[4],"e"); } void showarray() { int i; for(i=0;i<=5;i++) { printf("%s\n",a[i]); } printf("\n"); } void sortarray() { int i,ex; do for(ex=1,i=0;i<=4;i++) { if(strcmp(a[i],a[i+1]) > 0) {ex=exchange(i,i+1);}; } while(ex==0); } int exchange(i,j) { char k[15]; strcpy(k,a[i]); strcpy(a[i],a[j]); strcpy(a[j],"x"); /*normalerweise strcpy(a[j],k) statt (a[i],"x"), wollt es aber so probieren (zum Verständnis)*/ return(0); } Wie man sieht, sind die Werte in dem Array a schon geordnet. Also müsste doch die Funktion exchange() NIEMALS aufgerufen werden, da i nie größer ist als i+1. Im Array a ist ja schon alles geordnet bei mir in diesem Beispiel. { if(strcmp(a[i],a[i+1]) > 0) {ex=exchange(i,i+1);}; } Das Problem ist: die Funktion exchange() wird dennoch aufgerufen. Führe ich das Programm aus, wird 5 mal ein "x" ausgegeben. Das heißt, das exchange() ausgeführt wird. Nur warum!!!!! PS: Mal 'ne eher psychisch gesehene Frage: Wie kommt ihr damit klar, wenn mal was nicht so funktioniert, wie's funktionieren soll? Bzw. wie war's bei euch am Anfang, wo ihr C gelernt habt? Ich krieg immer voll die Krise, wenn was nicht funktionert und werd total zum Psycho... Habt ihr beim Erlernen von C einfach weiter gemacht und es gut sein lassen, wenn ein Beispiel nicht funktioniert hat. Oder habt ihr so lange gesucht, bis ihr den Fehler gefunden habt, bzw. rausgefunden habt, warum das Programm so komische Sachen macht, die es eigentlich nicht tun sollte. Ich werd voll bekloppt. In meinem 2. Leben mach ich kein Studium mehr, wo man auch Programmieren muss...
Klotzkopp Geschrieben 30. Juli 2007 Geschrieben 30. Juli 2007 Das heißt, das exchange() ausgeführt wird. Nur warum!!!!!Weil deine Schleife in der Funktion sortarray zu weit läuft. Deine Variable i läuft bis einschließlich vier, das heißt, du vergleichst a[4] mit a[5]. a[5] gibt es aber gar nicht -> Undefiniertes Verhalten.
Byte_Breaker Geschrieben 30. Juli 2007 Autor Geschrieben 30. Juli 2007 Jetzt funktioniert das, danke!
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden