Struktur in C

Neue Frage »

Auf diesen Beitrag antworten »
lilli. Struktur in C

hallo,
bräuchte hilfe bei folgender aufgabe:
code:
1:
2:
3:
4:
5:
6:
//Struktur-Deklaration
typedef struct dvd {
char *name; // Der Name der DVD
int jahr; // Erscheinungsjahr
int ausgeliehen; // ausgeliehen, 0 fuer nein, 1 fuer ja
} dvd_t;


Deklariere eine Feldvariable film vom Typ dvd t, die genau zwei DVD-Einträge aufnehmen kann. Das Feld soll mit den folgenden Werten belegt werden:
Feld Name Jahr ausgeliehen
0 Jupiter 1900 ja
1 Dark 2000 nein
Wie sieht die Initialisierung aus?
code:
1:
2:
3:
4:
dvd_t film[1]={
{0,"Jupiter",1900,"ja"}
{1,"Dark",2000,"nein"}
};


das war mein Ansatz. kann mir bitte jemand helfen, weiter komme ich leider nicht.
 
Auf diesen Beitrag antworten »
as_string

Hallo,

Da habe ich ein paar "Einwände"... Augenzwinkern
Du willst ein Array mit zwei Elementen. Da musst Du bei der Definition dann eine 2 angeben, nicht 1. Es stimmt zwar, dass der höchste Index eine 1 ist, aber bei der Definition des Arrays muss man trotzdem die Gesamtanzahl angeben, also eins mehr als der höchste Index. Dann hätten wir schonmal:
code:
1:
dvd_t film[2]={

Aber: Du kannst es sogar noch einfacher haben! Der Compiler kennt die Gesamtzahl schon selbst, weil Du danach ja gleich die Initialisierung hast. Du kannst in einem solchen Fall sogar die Zahl komplett weg lassen. Also etwa so:
code:
1:
dvd_t film[]={...}

Als nächstes: die erste Spalte soll bei der Beispieltabelle nur der Index mit 0 und 1 sein. Der muss nicht bei der Initialisierung mit rein. Da ist automatisch das in der ersten geschweiften Klammer der erste Datensatz mit Index 0 und die zweite Klammer dann Datensatz mit Index 1.
Dann darfst Du das "ja" und "nein" nicht als String angeben. Schau Dir die Deklaration der struct an: Da ist ein "int ausgeliehen" und auch ein Kommentar hinten dran. Kommst Du da schon selbst drauf, was da richtig sein könnte?
Die Datensätze müssen mit Kommata getrennt sein, also in der Art (hier mal als Beispiel mit 4 Datensätzen):
code:
1:
dvd_t film[]={{...}, {...}, {...}, {...}}

Also fehlt Dir in Zeile 2 das Komma ganz am Ende der Zeile.

Mein Tipp: Am besten machst Du ein ganz kleines, aber komplettes Programm daraus und versuchst es tatsächlich mit einem Compiler zu übersetzen. So mache ich das auch immer, sonst findet man so etwas wie das fehlende Komma nur sehr schwer. Glaube mir, das hilft in mehrfacher Hinsicht!

Gruß
Marco
Auf diesen Beitrag antworten »
lilli.

danke für deine ausführliche antwort.
stimmt das jetzt so:


code:
1:
2:
3:
4:
5:
dvd_t film[]={
{"Jupiter",1900,0},
{"Dark",2000,1},
};
}
Auf diesen Beitrag antworten »
as_string

Ja, sehr gut! Daumen hoch Das sieht schon viel besser aus!

Es ist jetzt schon syntaktisch richtig (wobei die letzte geschweifte Klammer in der letzten Zeile nicht mehr zur Definition von "film[]" gehört, oder).
Allerdings musst Du nochmal die letzte Spalte überprüfen. Ich habe das umgekehrt (0 steht für "nein" laut Beschreibung, richtig?)
Und ich persönlich lasse das Komma hinter dem zweiten Datensatz dann normalerweise weg. Ich glaube, der Compiler ignoriert das im Normalfall und ich weiß nicht, ob das laut offizieller C-Syntax dann auch ok ist, aber ich gehe immer davon aus, dass es eine Liste von Werten ist, die Komma-getrennt ist, also sowas zb.:
code:
1:
{a, b, c}

machst Du hinter dem c ja auch kein Komma. Dann würde ich bei:
code:
1:
2:
3:
4:
5:
{
  {...},
  {...},
  {...} // <--- hier kein Komma
};

das letzte Komma auch weg lassen.

Gruß
Marco
 
Auf diesen Beitrag antworten »
lilli.

also so:

code:
1:
2:
3:
4:
dvd_t film[]={
{"Jupiter",1900,1}, {"Dark",2000,0}
};
Auf diesen Beitrag antworten »
lilli.

wie kann ich das als c Programm schreiben, bzw. was muss in printf stehen?
Auf diesen Beitrag antworten »
as_string

Hallo,

ich habe zum Testen z. B. das hier verwendet:
code:
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:
#include <stdio.h>

//Struktur-Deklaration
typedef struct dvd {
  char *name; // Der Name der DVD
  int jahr; // Erscheinungsjahr
  int ausgeliehen; // ausgeliehen, 0 fuer nein, 1 fuer ja
} dvd_t;


int main(){
  dvd_t film[]={
    {"Jupiter",1900,1},
    {"Dark",2000,0}
  };
  int i;
  
  // Ausgabe:
  for(i = 0; i < (sizeof(film)/sizeof(film[0])); ++i) {
    printf("%i: name: %s;  jahr: %i;  ausgeliehen: %s\n", i, film[i].name, film[i].jahr, film[i].ausgeliehen ? "ja" : "nein");
  }
  return 0;
}


Aber das kannst Du natürlich machen, wie Du möchtest.

Gruß
Marco
Auf diesen Beitrag antworten »
lilli.

danke smile
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »