Zum Inhalt springen

lapi_k

Mitglieder
  • Gesamte Inhalte

    26
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von lapi_k

  1. 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 fprintf is doch nur zur ausgabe da oder?
  2. ... was heißt denn ich hangel mich durch? ziel=fopen("nutzer.txt","r"); das heißt doch das ich sie öffne um aus ihr zu lesen
  3. ja das ist die selbe aufgabe... leider das is jetzt aber auch nur ein ausschnitt von dem was ich bis jetzt geschrieben hab .. warum ist das unsinn?
  4. 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?
  5. hallo und zwar hab ich mal ne frage zur c programmierung. Wie kann ich die Eingabe mit einer txt datei vergleichen. Es handelt sich hierbei um ein login in einer doppelt verketteten liste
  6. das heißt jetzt was für mich? und was is das problem mit den syntaxfehlern
  7. 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
  8. 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
  9. ja du meinst wahrscheinlich deine frage ob ich bei den vorlesungen und übungen nicht war ... auch wenn man bei vl und übungen ist muss man nicht alles verstehn ... sonst würd ich ja nich nach hilfe fragen
  10. na ihr habt ja fleißig wissen ausgetauscht ... allerdings weiß ich jetzt immer noch nich weiter
  11. das heißt jetzt welchen teil muss ich jetzt rauslassen ... wie gesagt ich kenn mich mit den listen nicht aus ... hab das nur so aus büchern und dem internet erarbeitet
  12. # 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
  13. na toll du machst mir ja mut ... ich bin grad dabei das programm zu überarbeiten
  14. na wunderbar ich mir schon die ganzen anderen tage .. komm aber nich weiter
  15. 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
  16. Solange sie nicht vorne stehen können, macht das nichts. Die Frage ist also, ob eine Kontonummer wie 012345678 erlaubt ist. Und bedenke, dass du in einem 32-Bit-int nur 9 Ziffern sicher unterbringen kannst. naja ich kann das ja mit reinbringen... also nehme ich das ganze in char... wie decke ich 10 ziffern ab diese muss ich nämlich auch noch beschränken (als die kto.nr. auf 10 stellen
  17. * 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
  18. 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); }
  19. also muss ich im gesamten quelltext struct nutzer benutzen zu den arrays ... der int typ hab ich gewählt weil das nur zahlen sind .. also wie gesagt hab echt kein plan von listen ...
  20. 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
  21. alles klaro das mit der kontonr. war dann wohl nen einfacher schreibfehler ... und das mit dem struct nutzer hab ich doch oben drin
  22. na es kommen bei mir 11 fehlermeldungen: z.b. nutzer nicht deklarierter bezeichner; kontonummer kein element von nutzer ich weiß auch nich ob ich das alles an anfang machen soll mit der verketteten liste und dann die abfrage
  23. 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...