Byte_Breaker Geschrieben 30. Juli 2007 Teilen 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. Juli 2007 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Byte_Breaker Geschrieben 30. Juli 2007 Autor Teilen Geschrieben 30. Juli 2007 Jetzt funktioniert das, danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.