Werte an Struktur ein- und auslesen
-
Hallo Leute,
bin relativ neu mit C# mit dabei.Habe allerdings schon etwas programmiererfahrung mit html, css und java.
nun zu meinem problem:
ich möchte mir ein programm schreiben um kundendaten über die konsole einzugeben, in einer datei zu speichen und auch wieder auszulesen.allerdigs hapert es schon daran die datein einzulesen (dier part klappt) und sie anschließend direkt wieder auszugeben (dieser part klappt nicht)
der code sieht wie folgt aus:
#include <stdio.h> #include <stdlib.h> typedef struct struktur{ char Nachname[40]; char Vorname[30]; char StrasseundHausnummer[60]; char PLZ[5]; char Ort[50]; char Festnetz[15]; char Mobil[20]; char Fax[15]; char EMail[60]; char Geburtsdatum[10]; char Kundennummer[8]; } kunde; char kundenEingabe(kunde k1){ printf("Nachname.................: "); scanf("%s", &k1.Nachname); printf("Vorname..................: "); scanf("%s", &k1.Vorname); printf("Strasse und Hausnummer...: "); scanf("%s", &k1.StrasseundHausnummer); printf("PLZ......................: "); scanf("%s", &k1.PLZ); printf("Ort......................: "); scanf("%s", &k1.Ort); printf("Telefon Festnetz.........: "); scanf("%s", &k1.Festnetz); printf("Telefon Mobil............: "); scanf("%s", &k1.Mobil); printf("Fax......................: "); scanf("%s", &k1.Fax); printf("E-Mail...................: "); scanf("%s", &k1.EMail); printf("Geburtsdatum.............: "); scanf("%s", &k1.Geburtsdatum); printf("Kundennummer.............: "); scanf("%s", &k1.Kundennummer); printf("1: %s", k1.Nachname); // 1 printf("\n"); } void kundenAusgabe(kunde k1){ printf("Nachname.................: %s\n", k1.Nachname); printf("Vorname..................: %s\n", k1.Vorname); printf("Strasse und Hausnummer...: %s\n", k1.StrasseundHausnummer); printf("PLZ......................: %s\n", k1.PLZ); printf("Ort......................: %s\n", k1.Ort); printf("Telefon Festnetz.........: %s\n", k1.Festnetz); printf("Telefon Mobil............: %s\n", k1.Mobil); printf("Fax......................: %s\n", k1.Fax); printf("E-Mail...................: %s\n", k1.EMail); printf("Geburtsdatum.............: %s\n", k1.Geburtsdatum); printf("Kundennummer.............: %s\n", k1.Kundennummer); printf("\n"); } int main(int argc, char *argv[]){ kunde k1; kundenEingabe(k1); printf("2: %s", k1.Nachname); // 2 kundenAusgabe(k1); system("PAUSE"); return 0; }
an der stelle //1 sind die daten noch korrekt => einlesen klappt
an der stelle //2 kommt nur müll über die konsole raus
=> die werte werden aus der struktur bzw. der funktion nicht an die main-methode übergeben. wie kann ich das problem lösen.
habe auch schon versucht die struktur wie auf galileo-computing aufzubauen, hat aber leider auch nicht geklappt.ich hoffe ihr könnt mir helfen.
aja die fachausdrücke wie pointer und sowas habe ich noch nicht so drauf.
also am liebsten in laiensprache.schon mal danke im vorraus!
-
1. Das ist kein C#
2. html/ css sind keine Programmiersprachen*edit
aja die fachausdrücke wie pointer und sowas habe ich noch nicht so drauf
Dann würde ich mir das erstmal anschauen !
Gruss Sheldor
-
Es ist (Ansi) C.
-
theta schrieb:
Es ist (Ansi) C.
und c++
-
Registrierter Benutzernam schrieb:
theta schrieb:
Es ist (Ansi) C.
und c++
Oh, wo denn?
-
Dieser Thread wurde von Moderator/in Dravere aus dem Forum C# und .NET in das Forum C (C89 und C99) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
theta schrieb:
Registrierter Benutzernam schrieb:
theta schrieb:
Es ist (Ansi) C.
und c++
Oh, wo denn?
system("PAUSE");
-
Ersetze
char kundenEingabe(kunde k1){
durch
char kundenEingabe(kunde *k1){
und innerhalb der Funktion alle
&k1.
durch
k1->
In main
kundenEingabe(k1);
zu
kundenEingabe(&k1);
Du hast dann aber immer noch keine Datei angelegt, in der du die Werte abspeichern und lesen wolltest.
-
Aus dem anderen, doppelt erstellten Thread eine nützliche Antwort:
Belli schrieb:
Entweder:
kunde kundenEingabe(){ kunde k1; ... return k1; } ... int main(int argc, char *argv[]){ kunde k1; k1 = kundenEingabe(); ...
oder:
void kundenEingabe(kunde *k1){ ... } ... int main(int argc, char *argv[]){ kunde k1; kundenEingabe(&k1); ...
Im ersten Fall erstellst Du in der Eingabefunktion eine Kundenstruktur und gibst sie an den Aufrufer zurück, der sie per Zuweisung in einer Struktur speichert, die er selbst erstellt hat:
k1 = kundenEingabe();Im zweiten Fall erstellt der Aufrufer eine Struktur und übergibt der Eingabefunktion einen Zeiger darauf und die Eingabefunktion arbeitet direkt auf der Struktur des Aufrufers.
Dann muß der . - Operator geändert werden in den -> Operator, also aus
&k1.Nachname wird &k1->Nachname usw.
-
ich habe jetzt mal den lösungsvorschlag von wutz getestet und nun funzt alles einwandfrei (das einlesen und ausgeben)
das ich noch keine datei erstelle wo etwas gespeichert wird ist mir schon bewusst aber ich habe mir gedacht wozu schon weitermachen wenn das ein- und auslesen noch nichtmal funktioniert
habe ich das jetzt richtig verstanden das wenn ich eine funktion deklariere an die ein eingabewert übermittelt werden soll dann muss vor die variabel ein * (pointer?)
dass das & bei der kundeneingabe im main gefehlt hat ist eig peinlich
ist ja das gleiche prinzip wie bei scanf das ich den wert der variabel ändern will oder?aber was macht das
->
in der funktion kundeneingabe anders als der
.
der vorher da war????
-
Funktionsparameter werden in C immer als Werte übergeben, d.h. eine Änderung am übergebenen Wert in der Funktion wird im aufrufenden Kontext nicht beachtet.
void fkt(int parameter) { parameter = 2; } int a = 1; printf("vorher: %d", a); fkt(a); printf("nachher: %d", a);
Wenn du Änderungen an Funktionparameterwerten machen willst, musst du selbst für das "Durchschlagen" der Änderungen in der Funktion an den aufrufenden Kontext sorgen, dies geschieht in C üblicherweise durch Zeiger (*). Der Zeiger selbst bleibt wie oben erwähnt als Wert unverändert, du änderst in der Funktion aber den Speicherbereich, auf den der Zeiger zeigt:
void fkt(int *parameter) { *parameter = 2; } int a = 1; printf("vorher: %d", a); fkt(&a); printf("nachher: %d", a);
.
greift auf ein Element einer Struktur zu,
->
greift auf ein Element eines Zeigers auf eine Struktur zu. Alles absolute C Grundlagen, die du beherrschen solltest.