Zum Inhalt springen

lapi_k

Mitglieder
  • Gesamte Inhalte

    26
  • Benutzer seit

  • Letzter Besuch

Beiträge von lapi_k

  1. Du läufst über den next-Zeiger von Eintrag zu Eintrag. Das wäre ja auch nicht falsch, wenn denn in der Liste irgendwas drin wäre.

    also ich weiß nich irgendwie versteh ich da was falsch .. ich hab die liste erstellt mit vorname,nachname,kto,passwort .. und dann zeige ich immer mit dem next zeiger drauf

    Mag ja sein, aber du tust es leider nicht. Statt dessen versuchst du, mit fprintf in die Datei zu schreiben.

    fprintf is doch nur zur ausgabe da oder?

  2. Weil du dich durch eine verkette Liste hangelst, in der nichts drin steht.

    ... was heißt denn ich hangel mich durch?

    Und weil du nicht aus der Datei liest, sondern in die Datei schreibst.

    ziel=fopen("nutzer.txt","r");

    das heißt doch das ich sie öffne um aus ihr zu lesen

  3. void main()			//*write+Ausgabe
    
    {
    
    	FILE *ziel;
    
    	struct nutzer *zeiger;
    
    
    	ziel=fopen("nutzer.txt","r");
    
    	if(NULL==ziel)
    
    	{
    
    		fprintf(stderr,"Datei nutzer.txt kann nicht geöffnet werden!\n");
    
    		exit (0);
    
    	}
    
    	zeiger=anfang;
    
    		while(zeiger!=NULL)
    
    		{
    
    			printf ("Bitte geben Sie folgendes ein, um sich erfolgreich anzumelden!\n");
    
    			printf ("Vornamen:\n");
    
    			scanf("%s",strcmp vorname);
    
    			printf ("Nachname:\n");
    
    			scanf("%s",strcmp nachname);
    
    			printf("Kontonummer:\n");
    
    			scanf("%s",strcmp kontonummer);
    
    			printf("Passwort:\n");
    
    			scanf("%s",strcmp passwort);
    
    			if(strcmp(char vorname,char nachname,char kontonummer,char passwort)==0)
    
    			{
    
    				printf ("Sie haben sich erfolgreich eingeloggt\n");
    
    			}
    
    			fprintf(ziel,"%s|%s|%s|%s\n", zeiger->vorname,zeiger->nachname,zeiger->kontonummer,zeiger->passwort);
    
    			zeiger=zeiger->next;
    
    		}
    
    		fclose(ziel);
    
    }
    
    
    

    so?

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

  5. ich danke schon mal im voraus den leuten die mir bis jetzt geholfen haben, hab nicht so viel ahnung von c ... grade von listen ... also sagt mir mal welches effektiver ist und was ich noch bearbeiten muss.. vielen lieben dank:uli

    das war meine letzte antwort gestern .. seitdem hab ich nichts mehr geschrieben ... ich versteh das problem jetzt nicht ... ich will doch einfach nur wissen was ich besser machen kann

  6. # include <stdio.h>

    # include <malloc.h> //*Speicherverwaltung

    # include <stdlib.h>

    # include <string.h>

    # include <math.h>

    struct nutzer //* Definition eines Listenelements

    {

    char vorname [40];

    char name [40]; //* Datenteil

    char passwort [20];

    char kontonummer [10];

    struct nutzer *next, *prev; //* Zeiger auf das benachbartes Listenelement

    };

    struct neuer_nutzer

    {

    char telefonnummer[15];

    char email[30];

    int plz[6];

    char stadt[30];

    };

    void main ()

    {

    int datei_nutzer;

    FILE *zeiger_datei_nutzer;

    struct nutzer *start=NULL, *aktuell=NULL; //* Zeiger auf das Element mit dem aktuell gearbeitet wird

    aktuell = (struct nutzer *) malloc (sizeof(struct nutzer)); //* Anlegen v. neuenm Listenelement

    //* soviel Speicher wie nutzer braucht

    aktuell-> prev=NULL; //* erstes Element hat kein Vorgänger - Zeiger ins Leere

    while (gets(aktuell->name) != NULL) //* solange noch Daten in der Eingabe vorhanden sind, name wird eingelesen

    {

    scanf ("%s", &aktuell->passwort); //* Passwort wird eingelesen

    scanf ("%d", &aktuell->kontonummer); //* Kontonummer wird eingelesen

    getchar(); //* Enter von scanf abfangen

    aktuell->next = (struct nutzer *) //* neues Listenelement reservieren, Komponente next darauf zeigen lassen

    malloc(sizeof(struct nutzer));

    aktuell->next->prev = aktuell; //* um den "Rückweg" zu sichern wird Vorgängerzeiger des nächsten Elements auf das aktuelle

    aktuell = aktuell->next; //* das nächste, noch leere Element wird das aktuelle, ab hier wird also das neue Element durch aktuell referenziert

    }

    aktuell->passwort; //* auch wenn das Ende der Daten erreicht ist, wird ein neues

    aktuell->kontonummer; //* Element angelegt = leere Werte

    aktuell->name;

    aktuell->next = NULL;

    printf ("-----------------Kontoführungsprogramm-----------------\n");

    do

    {

    printf ("Name:\n", aktuell->name);

    printf ("Passwort:\n", aktuell->passwort);

    printf ("Kontonummer:\n", aktuell->kontonummer);

    fflush(stdin);

    zeiger_datei_nutzer = fopen(datei_nutzer,"r");

    } while (datei_nutzer == 0);

    }

    das is das jetzige programm ... es treten keine fehler auf ... allerdings macht es auch nichts .. aber hab ja auch noch nich viel zum machen ... könnt ihr mir weiterhelfen ob der erste teil so geht oder ich was ändern muss

  7. So nun mal meine frage hab inzwischen 2 programme ... hatte erst das erste was wir die ganze zeit besprochen haben und jetzt noch ein zweites das hab ich mir aus einem buch ausgearbeitet... nun meine frage welches besser ist vom programmierstil und welches der aufgabenstellung besser entspricht

    aufgabenstellung:

    - benutzer muss sich einloggen (Name, Passwort, Kontonr.)

    - bekannte benutzer in einer txt datei gespeichert, werden in das system geladen und in einer doppelt verketteten liste mit dem login verglichen

    - wenn kunde existiert soll passwort übereinstimmen

    - 3 Versuche zur Eingabe von Passwort ansonsten beendet sich das system

    - wenn kunde nicht existiert kann er sich anlegen, dazu wird neue seite aufgerufen, wo er adresse,tel.nr, fax, email eingeben kann

    das is mal der erste teil der aufgabenstellung

    nun meine 1. Variante des programms:

    # include <stdio.h>

    # include <malloc.h> //*Speicherverwaltung

    # include <stdlib.h>

    # include <string.h>

    # include <math.h>

    struct nutzer //* Definition eines Listenelements

    {

    char name [40]; //* Datenteil

    char passwort [10];

    char kontonummer [10];

    struct nutzer *next, *prev; //* Zeiger auf das benachbartes Listenelement

    };

    void main ()

    {

    int datei_nutzer;

    FILE *zeiger_datei_nutzer=NULL;

    struct nutzer *start=NULL, *aktuell=NULL; //* Zeiger auf das Element mit dem aktuell gearbeitet wird

    aktuell = (struct nutzer *) malloc (sizeof(struct nutzer)); //* Anlegen v. neuenm Listenelement

    //* soviel Speicher wie nutzer braucht

    aktuell-> prev=NULL; //* erstes Element hat kein Vorgänger - Zeiger ins Leere

    while (gets(aktuell->name) != NULL) //* solange noch Daten in der Eingabe vorhanden sind, name wird eingelesen

    {

    scanf ("%s", &aktuell->passwort); //* Passwort wird eingelesen

    scanf ("%d", &aktuell->kontonummer); //* Kontonummer wird eingelesen

    getchar(); //* Enter von scanf abfangen

    aktuell->next = (struct nutzer *) //* neues Listenelement reservieren, Komponente next darauf zeigen lassen

    malloc(sizeof(struct nutzer));

    aktuell->next->prev = aktuell; //* um den "Rückweg" zu sichern wird Vorgängerzeiger des nächsten Elements auf das aktuelle

    aktuell = aktuell->next; //* das nächste, noch leere Element wird das aktuelle, ab hier wird also das neue Element durch aktuell referenziert

    }

    aktuell->passwort = 0; //* auch wenn das Ende der Daten erreicht ist, wird ein neues

    aktuell->kontonummer =0; //* Element angelegt = leere Werte

    aktuell->name[0]0 '\0';

    aktuell->next = NULL;

    printf ("-----------------Kontoführungsprogramm-----------------\n");

    do

    {

    printf ("Name:\n", aktuell->name);

    printf ("Passwort:\n", aktuell->passwort);

    printf ("Kontonummer:\n", aktuell->kontonummer);

    fflush(stdin);

    zeiger_datei_nutzer = fopen(datei_nutzer,"r");

    } while (datei_nutzer == 0);

    }

    2.Variante (welche ich fast übersichtlicher finde)

    # include <stdio.h>

    # include <malloc.h> //*Speicherverwaltung

    # include <stdlib.h>

    # include <string.h>

    # include <math.h>

    struct nutzer //* Definition eines Listenelements

    {

    char name [40]; //* Datenteil

    char passwort [10];

    char kontonummer [10];

    int start;

    struct nutzer *next, *last; //* Zeiger auf das benachbartes Listenelement

    };

    main ()

    {

    register struct nutzer *nz;

    int c;

    nz =(struct nutzer *)malloc(sizeof(struct nutzer));

    nz->name=40;

    nz->passwort=10;

    nz->kontonummer=10;

    nz->last = nz->next = NULL;

    for(;;)

    {

    printf("Sind Sie bereits Kunde? (J/N):\n");

    if((c=getchar()) == EOF)

    exit(0);

    if (c=='J'){

    printf("Geben Sie ihren Namen ein:\n",start->name);

    printf("Geben Sie ihr Passwort ein:\n",start->passwort);

    printf("Geben Sie ihre Kontonummer ein:\n",start->kontonummer);

    if(c==0)

    printf ("Fehler!!! Entweder war Ihre Eingabe falsch oder Sie sind noch nicht als Kunde registriert\n");

    }

    else if (c=='N'){

    printf("------------Neuanmeldung-------------\n");

    printf("Geben Sie Ihre Adresse ein:\n");

    printf("Geben Sie Ihre Telefonnummer ein:\n");

    printf("Geben Sie Ihre Faxnummer ein:\n");

    printf("Geben Sie Ihre E-mail Adresse ein:\n");

    if(c==0)

    printf ("Fehler bei der Eingabe! Bitte versuchen Sie es erneut!\n");

    }

    }

    }

    ich danke schon mal im voraus den leuten die mir bis jetzt geholfen haben, hab nicht so viel ahnung von c ... grade von listen ... also sagt mir mal welches effektiver ist und was ich noch bearbeiten muss.. vielen lieben dank:uli

  8. * Es steht immer noch an zwei Stellen nutzer ohne struct. -erledigt

    * Für eine Kontonummer brauchst du kein int-Array. Wenn der Wertebereich eines int ausreicht und führende Nullen nicht auftauchen können, nimm einen einzelnen int, sonst ein char-Array. - in einer kontonr. können doch aber nullen vorkommen

    * Den start-Zeiger rauszuwerfen, war keine gute Idee, weil du jetzt nicht mehr weißt, wo deine Liste anfängt.erledigt

    * Eine doppelte Verkettung brauchst du nur, wenn du rückwärts durch die Liste laufen musst.darauf gibt es zusatzpunkte, außerdem hilft es beim suchen

    * Mit dem Formatspezifizierer %c liest scanf nur ein einzelnes Zeichen ein, keine Zeichenkette.wie lese ich eine zeichenkette ... hab grad nachgeschaut und nichts gefunden

    * Warum versuchst du überhaupt, nach dem Einlesen alle Member von aktuell auf Null zu setzen?weiß ich nich ;)

    * datei_nutzer und zeiger_datei_nutzer sind nicht deklariert.wird noch erledigt ;)

  9. so sieht das ganze jetzt aus ... hab das jetzt doppelt verkettet .. allerdings noch die selben probleme

    # include <stdio.h>

    # include <malloc.h>

    # include <stdlib.h>

    # include <string.h>

    # include <math.h>

    struct nutzer

    {

    char name [40];

    char passwort [10];

    int kontonummer [20];

    struct nutzer* next, *prev;

    };

    void main ()

    {

    struct nutzer *aktuell=NULL;

    aktuell = (struct nutzer *) malloc (sizeof(nutzer));

    aktuell-> prev=NULL;

    while (gets(aktuell->name) != NULL)

    {

    scanf ("%c", &aktuell->passwort);

    scanf ("%d", &aktuell->kontonummer);

    getchar();

    aktuell->next = (struct nutzer *)

    malloc(sizeof(nutzer));

    aktuell->next->prev = aktuell;

    aktuell = aktuell->next;

    }

    aktuell->passwort = 0;

    aktuell->kontonummer =0;

    aktuell->name[0]0 '\0';

    aktuell->next = NULL;

    printf ("-----------------Kontoführungsprogramm-----------------\n");

    do

    {

    printf ("Name:\n", aktuell->name);

    printf ("Passwort:\n", aktuell->passwort);

    printf ("Kontonummer:\n", aktuell->kontonummer);

    fflush(stdin);

    zeiger_datei_nutzer = fopen(datei_nutzer,"r");

    } while (datei_nutzer == 0);

    }

  10. struct nutzer //* Definition eines Listenelements

    {

    char name [40]; //* Datenteil

    char passwort [10];

    int kontonnummer [20];

    struct nutzer *next; //* Zeiger auf das nächste Listenelement

    };

    damit müsste ich nutzer doch deklariert haben oder nicht?

    dann hab ich noch ne frage und zwar zeigt er noch error ('=': linker operand muss ein l-wert sein) an bei den zeilen

    aktuell->passwort=0;

    aktuell->kontonummer=0;

    sorry schon mal wegen meinen blöden fragen hab echt nich viel ahnung von c

  11. meine aufgabenstellung ist diese: admin, bankangestellte, kunde müssen sich einloggen. name passwort und kto.nummer sind zu erfragen. bekannte benutzer sind in der datei nutzer.txt gespeichert und werden in das system geladen, in einer verketteten liste und mit dem login verglichen ...

    so das hab ich versucht zu realisieren allerdings kenn ich mich nicht mit listen aus ... nun geht das nich was ich funktioniert haben und meine frage is warum?

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