Christoph Zurnieden: C komme nicht weiter....

Beitrag lesen

Hi,

Oh, eine Hausaufgabe? ;-)

#include <stdafx.h>

Bitte bleibe vorerst bei Standard-C.

struct daten{
char name[20];
char vname[20];
int alter;
};

Du solltest Deinen Strukturen besser Namen geben, das ist dann später einfacher. Ein 'typedef' ist dafür z.B. geradezu prädestiniert.

int main()
{
char j, b;

Es sollten normalerweise alle Variablen mit einem Wertz initialisiert werden falls es nicht automatisch geschieht.

int menue=0, i=0, gesucht;

Der Datentyp 'int' sollte nur gewählt werden, wenn die Größe von 'int' bekannt ist. Passendere Datentypen gibt es in 'stdint.h'.

struct Knoten *anfang=0

Einen Pointer sollte man normalerweise mit dem Macro "NULL" initialisisieren. Dafür ist es da.

fflush(stdin);

fflush() kann danebengehen, die Rückgabe ist also auf Fehler zu testen ("errno" wird ebenfalls gesetzt).

scanf("%i" ,&menue);

scanf() kann danebengehen, die Rückgabe ist also auf Fehler zu testen.

printf("\tNeuer Knoten?j/n: ");
   fflush(stdin);

Da Du das öfter benutzt würde ich daraus eine eigene Funktion machen.

j=getchar();

getchar() kann danebengehen, die Rückgabe ist also auf Fehler zu testen.

if(j == 'j')

'J' funktioniert dann nicht. Vorschlag:

#include <ctype.h>
j = tolower(j);
if(j == 'j')

{
    ptr= (struct Knoten*) malloc (sizeof (struct Knoten));

Das Ergebnis von malloc() muß man vielleicht bei Experimenten und den riesigen Speichern heutzutage nicht mehr unbedingt testen, aber sowas sollte man sich gar nicht erst angewöhnen!

++i;

Der Unterschied zwischen i++ und ++i ist eigentlich nur noch für den Obfuscated C Contest von Bedeutung. Klarer Aufbau ist vorzuziehen.

else if (menue == 2)

Aufgrund der Tatsache, das es sich bei "menue" um einen Integerdatentyp handelt wäre evt ein switch() vorzuziehen.

if(!anfang)exit (2);

Für den Parameter von exit() gibt es die Macros "EXIT_FAILURE" und "EXIT_SUCCESS", die den jeweils passenden Rückgabewert auflösen.

while (p1 && gesucht != p1 ->zahl)

Klammern tun nicht weh und verbrauchen keinen Sprit. Nutze sie.

else if (menue == 4)
{
  return 0;
}

}

Die Funktion main() muß ein 'int' zurückgeben.

so short

Christoph Zurnieden