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.

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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