www.mikrocontroller.net

Forum: PC-Programmierung Kombidatentyp Struktur in C


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Da Mo (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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!
#include <stdio.h>
#include <string.h>

struct lagerverwaltung
{
 int artikelnummer;
 char artikelbezeichnung[100]; //[100] seit wann Größenangabe char???
 int artikelanzahl;
};

int main()
{
  struct lagerverwaltung artikel;
  
  artikel.artikelnummer=1234567890; //Wieso darf 0 nicht am Anfang stehen?
  strcpy(artikel.artikelbezeichnung, "Testartikel 1234567890"); //strcpy???
  artikel.artikelanzahl=123;
  
  printf("Artikelnummer: %d\n", artikel.artikelnummer);
  printf("Artikelbezeichnung: %s\n", artikel.artikelbezeichnung);
  printf("Artikelanzahl: %d\n\n", artikel.artikelanzahl);  
  
  system("PAUSE");  
  return 0;
}

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Karl Heinz Buchegger schrieb:
> Frage 2: Weil alle Zahlen, die mit 0 beginnen, Oktalzahlen sind

Nicht, wenn danach ein x kommt :-)

Autor: Patrick (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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;

Autor: Systemabhängig (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
besser:

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

Autor: Da Mo (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
int -> 4Byte

Wo liegt das Problem?

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Systemabhängig (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich wollte Deine Aussage nur etwas verallgemeinern ohne Deine 
mangelhaften Rechenfähigkeiten aufzudecken.

(2^31 > 1234567890)

Autor: Systemabhängig (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Das war natürlich an Patrick gerichtet, nicht an Da Mo!

Autor: Da Mo (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ist schon OK! :-)

Autor: Rolf Magnus (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net