Forum: PC-Programmierung Kombidatentyp Struktur in C


von Da Mo (Gast)


Lesenswert?

Guten Tag,

ich habe mein erstes Testprogramm für eine Struktur getippt. Ich habe 3 
Punkte, welche mir nicht ganz klar sind(als Kommentare im Code). Ich 
bitte euch um eine ganz kurze Erklärung.

Vielen Dank!
1
#include <stdio.h>
2
#include <string.h>
3
4
struct lagerverwaltung
5
{
6
 int artikelnummer;
7
 char artikelbezeichnung[100]; //[100] seit wann Größenangabe char???
8
 int artikelanzahl;
9
};
10
11
int main()
12
{
13
  struct lagerverwaltung artikel;
14
  
15
  artikel.artikelnummer=1234567890; //Wieso darf 0 nicht am Anfang stehen?
16
  strcpy(artikel.artikelbezeichnung, "Testartikel 1234567890"); //strcpy???
17
  artikel.artikelanzahl=123;
18
  
19
  printf("Artikelnummer: %d\n", artikel.artikelnummer);
20
  printf("Artikelbezeichnung: %s\n", artikel.artikelbezeichnung);
21
  printf("Artikelanzahl: %d\n\n", artikel.artikelanzahl);  
22
  
23
  system("PAUSE");  
24
  return 0;
25
}

von Karl H. (kbuchegg)


Lesenswert?

Da Mo schrieb:
> Guten Tag,
>
> ich habe mein erstes Testprogramm für eine Struktur getippt. Ich habe 3
> Punkte, welche mir nicht ganz klar sind(als Kommentare im Code). Ich
> bitte euch um eine ganz kurze Erklärung.

Ich finde mich im Zwiespalt wieder.
Alle deine 3 Fragen sind von der Sorte:
Die Antwort darauf findet sich in jedem noch so grindigem C-Buch und die 
Kentnis der Antworten auf diese Fragen sind eigentlich auf dem Level von 
'Kapitel 4 von 30'.

Besorg dir ein C-Buch (einige gibts auch als Online-Version). Du hast 
einfach mehr davon, wenn du nicht durch Fragen in einem Forum dein 1/8 
Wissen anlassbezogen auf 1/4 Wissen upgradest sondern wenn du 
stattdessen systematisch in die Geheimnisse von C eingeführt wirst. Und 
zwar mit den relevanten Details, wie zb: "Wie funktioniert eigentlich 
String-Verarbeitung in C?" In jedem noch so grindigem C-Buch ist das ein 
eigenes Kapitel und normalerweise einer der ersten Stolpersteine für 
jeden C-Lernenden.
Und ja. Dieses Kapitel kommt lange vor Strukturen.

Frage 1: Schon mal was von Arrays gehört?
Frage 2: Weil alle Zahlen, die mit 0 beginnen, Oktalzahlen sind
Frage 3: Weil Arrays nicht zuweisungskompatibel sind.

von Klaus W. (mfgkw)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Frage 2: Weil alle Zahlen, die mit 0 beginnen, Oktalzahlen sind

Nicht, wenn danach ein x kommt :-)

von Patrick (Gast)


Lesenswert?

... und wenn Du schon am C-Buch-Lesen bist, kannst Du Dich auch gleich 
über die "Länge" (Bitbreite) des Typs "int" informieren - mich stören 
folgende Codezeilen etwas:

Da Mo schrieb:
> int artikelnummer;
> ...
> artikel.artikelnummer=1234567890;

von Systemabhängig (Gast)


Lesenswert?

besser:

... über die Größe der Datentypen auf Deinem System informieren.

von Da Mo (Gast)


Lesenswert?

int -> 4Byte

Wo liegt das Problem?

von Karl H. (kbuchegg)


Lesenswert?

und wenn das dann geklärt ist, mal in einer schwachen Stunde (abends, 
wenn man nicht einschlafen kann) über die Frage nachdenken:

Ist eigentlich Alles was wir im Alltag als "...nummer" bezeichnen auch 
eine Nummer im mathematischen Sinn?

Beispiele:
  Telefon-'Nummer'    +43 732 148763
  Serien-'Nummer'     SN87-4532-867
  Segel-'Nummer'      AUT 79
  Artikel-'Nummer'    AC856/52-BLAU
  ....

Sind das tatsächlich "Nummern" im mathematischen Sinne? Ist daher ein 
Datentyp wie int oder long dafür angebracht oder nicht?

von Systemabhängig (Gast)


Lesenswert?

Ich wollte Deine Aussage nur etwas verallgemeinern ohne Deine 
mangelhaften Rechenfähigkeiten aufzudecken.

(2^31 > 1234567890)

von Systemabhängig (Gast)


Lesenswert?

Das war natürlich an Patrick gerichtet, nicht an Da Mo!

von Da Mo (Gast)


Lesenswert?

Ist schon OK! :-)

von Rolf Magnus (Gast)


Lesenswert?

Da Mo schrieb:
> int -> 4Byte

Wenn das in deinem C-Buch steht, wirf es weg. Es sei denn, es handelt 
sich um ein Buch speziell für den PC. Dann kauf dir zusätzlich ein 
C-Grundlagenbuch.

> Wo liegt das Problem?

Daß in C int auch nur 16 Bit breit sein kann. Es hängt vom Compiler ab.m 
Und es gibt eigentlich kaum einen Grund, int zu verwenden, wenn man 32 
Bit zwingend voraussetzt. long wäre dann besser geeignet, oder gleich 
einer von den Typen aus stdint.h wie z.B. int_least32_t.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.