Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

25.05.2011, 16:25

[C] Zeiger einer Strukturliste an Funktion

Hallo zusammen.

Ich bin grad ein wenig am tüfteln aber Zeiger sind so schon schwieirg und dann kommen noch Strukturlisten und einlesen von Daten in einer Funktion dazu.
Alles zusammen macht mich noch verwirrter als vorher.

Greife ich in meinem Modell richtig auf die Struktur zu, bzw. übergebe ich sie richtig an die Funktion?
Mein Problem ist oft, was übergebe ich eigentlich gerade an eine Funktion und wie kann ich DAS GEWÜNSCHTE an die Funktion übergeben
und wie greife ich in der Funktion richtig auf die Daten zu um sie zu bearbeiten? (Wirrwarr mit *, **, -> u. &)
======================================================================================

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
struct personal
{
unsigned long nummer;
char name[50];
double gehalt;
};

void einlesen(struct personal *liste[], int *zaehler);

int main()
{
int zaehler=0;
struct personal *liste[10]={NULL};

einlesen(liste, &zaehler);

printf("%s\n",liste[1]->name);

_getch();
return 0;
}

void einlesen(struct personal *liste[], int *zaehler)
{
FILE *fp=NULL;
char datei[20]={"\0"};
int i=0;

printf("Welche Datei oeffnen: ");
fflush(stdin);
scanf("%[^\n]s",datei);

if( (fp=fopen(datei,"r")) == NULL)
{
printf("Kann %s nicht zum lesen oeffnen\n",datei);
}
else
{
while( (fscanf(fp,"%lu",liste[i]->nummer)) != EOF)
{
fgetc(fp);
fscanf(fp,"%[^;]s",liste[i]->name);
fgetc(fp);
fscanf(fp,"%lf",&(liste[i]->gehalt));

i++;
}
}

*zaehler=i;

fclose(fp);
}
„lean over the bowl and then take a dive all of you are dead. i am alive“

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »drakon« (29.05.2011, 22:39) aus folgendem Grund: cpp-Tags


2

26.05.2011, 16:05

Ich denke, für diese Zwecke reicht ein einfaches Array aus, z.B.:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    int zaehler = 0;
    struct personal liste[10];
    einlesen(liste, &zaehler);
}

void einlesen(struct personal* liste, int* zaehler)
{
    *zaehler = 1;
    liste[0].nummer = 22; // 1. personal bekommt die Nummer 22
    // usw.
}

Passt das auf diese Weise oder wolltest etwas anderes?

3

29.05.2011, 21:10

Nicht ganz, hab aber schon die Lösung. Musste in der Funktion einen Malloc von 1*sizeof(struct ...) machen damit ich schreiben kann.
„lean over the bowl and then take a dive all of you are dead. i am alive“

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

29.05.2011, 22:07

Nicht ganz, hab aber schon die Lösung.

Was stimmt an defaultplayers vorschlag nicht? malloc ist hier garnicht nötig.
Wieso überhaupt reines C?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

5

31.05.2011, 20:51

Malloc wegen Dynamik und C wegen Schulfach.
„lean over the bowl and then take a dive all of you are dead. i am alive“

Werbeanzeige