lapi_k Geschrieben 13. Januar 2009 Geschrieben 13. Januar 2009 Guten tag allerseits ... ich habe mein programm folgendermaßen umgeschrieben: # include <stdio.h> # include <malloc.h> //*Speicherverwaltung # include <stdlib.h> # include <string.h> # include <math.h> struct nutzer { char vorname [30]; char nachname [40]; //* Datenteil char passwort [20]; char kontonummer [10]; struct nutzer *next, *previous; //* Zeiger auf das benachbartes Listenelement, next=Nachfolger, previous=Vorgänger }; struct nutzer *anfang=NULL; struct neuer_nutzer { char telefonnummer[15]; char email[30]; int plz[6]; char wohnort[40]; }; //*--------------------------------------------------------------------------*/ //* Code für erstes Element der Liste anfang=(struct nutzer*)malloc(sizeof(struct nutzer)); strcpy (anfang->vorname,vorname); strcpy (anfang->nachname,nachname); strcpy (anfang->passwort,passwort); strcpy (anfang->kontonummer,kontonummer); if ((anfang=(struct nutzer*)malloc(sizeof(struct nutzer)))==NULL) { printf ("Es ist kein Speicherplatz vorhanden\n"); return; } anfang->next=NULL; ende=anfang; ende->previous=NULL; } //*--------------------------------------------------------------------------*/ //* Code für weitere Elemente in der Liste else if (anfang!=NULL) { zeiger=anfang while(zeiger->next!=NULL) zeiger=zeiger->next; //*läuft bis ans Ende zeiger->next=(struct nutzer *)malloc(sizeof(struct nutzer)); zeiger=zeiger->next; //*Zeiger auf neuen Speicherplatz strcpy (zeiger->vorname,vorname); strcpy (zeiger->nachname,nachname); strcpy (zeiger->passwort,passwort); strcpy (zeiger->kontonummer,kontonummer); zeiger->next=NULL } //*--------------------------------------------------------------------------*/ void oeffnen (char *name) //* Unterprogramm { FILE *zeiger_datei_nutzer; struct nutzer *zeiger; //*int i=0; zeiger_datei_nutzer=(nutzer *)malloc(sizeof(nutzer)); zeiger_datei_nutzer=fopen("nutzer.txt","w+b"); if (zeiger_datei_nutzer==NULL) { printf ("Es gab ein Problem beim öffnen der Datei\n"); getch(); return (-1); } else(zeiger_datei_nutzer!=NULL); { puts ("Vorgang wird ausgeführt! Drücken Sie bitte eine Taste"); getchar(); fprintf(zeiger_datei_nutzer,"%s|%s|%s|%s\n",zeiger->vorname,zeiger->nachname,zeiger->passwort,zeiger->kontonummer); zeiger=zeiger->next; } fclose(zeiger_datei_nutzer); } nun möchte ich erstmal wissen .. ob die reihenfolge so in ordnung ist und ob es jetzt der aufg.stellung entspricht :hells: ich kriege immer wieder fehler die mit syntax zu tun haben z.b. in zeile 29 "Syntaxfehler:'->'" "Syntaxfehler:')'" ... kann mir da jemand helfen Zitieren
Klotzkopp Geschrieben 13. Januar 2009 Geschrieben 13. Januar 2009 nun möchte ich erstmal wissen .. ob die reihenfolge so in ordnung ist und ob es jetzt der aufg.stellung entsprichtZur Reihenfolge kann man nichts sagen, weil dein Programm keine main-Funktion, und damit keinen Anfang hat. Ein C-Programm wird nicht einfach von oben nach unten abgearbeitet. Außerdem steht der größte Teil des Codes gar nicht in Funktionen, das geht nicht. Zitieren
lapi_k Geschrieben 13. Januar 2009 Autor Geschrieben 13. Januar 2009 Außerdem steht der größte Teil des Codes gar nicht in Funktionen, das geht nicht. das heißt jetzt was für mich? und was is das problem mit den syntaxfehlern Zitieren
Klotzkopp Geschrieben 13. Januar 2009 Geschrieben 13. Januar 2009 das heißt jetzt was für mich?Du hast Anweisungen dort, wo keine sein dürfen. Anweisungen müssen innerhalb von Funktionen stehen. Funktionen strukturieren deinen Code. In der main-Funktion beginnt die Ausführung deines Programms. Das ist aber absolutes Grundlagenwissen. und was is das problem mit den syntaxfehlernDas Problem ist, dass der Compiler Anweisungen findet, wo keine stehen dürfen, siehe oben. // Hier dürfen keine Anweisungen stehen. // Kein malloc oder strcpy oder so. void DasIstEineBeispielfunktion() { // Hier dürfen Anweisungen stehen. } // Hier dürfen wieder keine Anweisungen stehen.[/code] Zitieren
unbenannt Geschrieben 14. Januar 2009 Geschrieben 14. Januar 2009 Darüber hinaus gibt es auch noch andere Unsinnigkeiten... [B]anfang=(struct nutzer*)malloc(sizeof(struct nutzer))[/B]; strcpy (anfang->vorname,vorname); strcpy (anfang->nachname,nachname); strcpy (anfang->passwort,passwort); strcpy (anfang->kontonummer,kontonummer); if (([B]anfang=(struct nutzer*)malloc(sizeof(struct nutzer)))[/B]==NULL) { printf ("Es ist kein Speicherplatz vorhanden\n"); return; } Was soll das doppelte "malloc" bewirken? else if (anfang!=NULL) Hängt vollkommen in der Luft, da es nicht direkt auf eine Abfrage folgt. zeiger=anfang "zeiger" ist nirgendwo definiert. else(zeiger_datei_nutzer!=NULL); Das schreit förmlich nach "Syntax-Fehler". Zitieren
TDM Geschrieben 14. Januar 2009 Geschrieben 14. Januar 2009 Darüber hinaus gibt es auch noch andere else(zeiger_datei_nutzer!=NULL); Das schreit förmlich nach "Syntax-Fehler". Nö. Syntax ist ok, nur unsinnig ein leeres else zu haben. (btw: das fclose sollte ins Else mit rein.) weitere Anmerkung: Rückgabetyp von malloc zu casten ist nicht schön. Zitieren
unbenannt Geschrieben 14. Januar 2009 Geschrieben 14. Januar 2009 Nö. Syntax ist ok, nur unsinnig ein leeres else zu haben. Ich bitte um Entschuldigung, Du hast natürlich recht. Das sah mir auf den ersten Blick so merkwürdig aus, dass ich es nicht selbst ausprobiert habe. Zitieren
AndiE Geschrieben 14. Januar 2009 Geschrieben 14. Januar 2009 Hallo, ich will Klotzkopp unterstützen. Ich habe mal, im Selbststudium gelernt, daß ein C-Programm etwa so aussieht: //Direktiven #include < . . . //Deklarationen //Datenstrukturen struct nutzer { . . . }; // Funktionen ausgabe Funktion(Eingabe); . . . //Hauptfunktion void main() { . . . } // Implemetirung der Unterfunktionen So sollte das Programm aussehen. Ansonsten kannst du bei Prof. Beck, der an Eurer Schule lehrt, einen Header zur verketteten Liste aufrufen. Da steht übrigens auch, daß du 17 Lehrveranstaltungen besucht haben müßtest. LG Andre' Zitieren
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.