Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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...

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...