Grundlagenfrage: Zugriff Struct



  • Hi Community, ich hab mal eine kleine Frage.
    Ich habe folgenden Code gegeben:

    #include <conio.h> 
     #include <stdio.h> 
     #include <stdlib.h> 
     #include <string.h> 
     #include <time.h>   
    
    typedef struct Adresse
     { char Strasse[120]; 
       int  Hausnummer;        
     } ; 
    
    typedef struct
     { 
       struct Adresse;
       float  plz;
     } ident;
    
    typedef struct 
     { char    Name[120]; 
       int     tele;  
       ident *ident;
     } person;
    
    int setPerson (person *defPerson)
    {
    
    }
    
    void main()
    {
    	person test;
    	setPerson(&test);
    
    }
    

    Wie kann ich nun in setPerson auf die Struktur Adresse zugreifen um diese zu setzen?

    Ich hatte folgendes versucht

    int setPerson (person *defPerson)
    {
    	defPerson->ident->'Hier bekomme ich aber nur die plz von der Intelli Sense angeboten'
    }
    

    Danke im Vorraus


  • Mod

    struct Adresse;
    

    Das Ding hat keinen Namen bei dir. Das dürfte nicht einmal compilieren. Das wäre so, als hättest du

    float;
    

    geschrieben.

    Da sind noch so einige Dinge drin, die du vermutlich abgeschrieben hast, ohne sie zu verstehen:

    typedef struct Adresse
     { char Strasse[120];
       int  Hausnummer;        
     } ;
    

    Warum typedef, wenn du dann keinen alternativen Bezeichner angibst?

    ident *ident;
    

    Warum ein Zeiger?

    void main()
    

    Das versteht dein VS vielleicht als Compilererweiterung, aber andere Compiler nicht. Korrekte main-Funktionen geben int zurück.

    Keine technischen Fehler, aber auch schlecht:

    float  plz;
    

    Autsch. Fließkommazahl als Postleitzahl? Schon einmal einen Brief nach 01129 Dresden verschickt?

    int     tele;
    

    Das wird auch lustig. Vielleicht ist dir schon einmal aufgefallen, dass selbst in Deutschland fast alle Nummern mit 0 anfangen. Außerdem sind sie meistens ziemlich lang. Und die spinnerten Amis haben auch noch Buchstaben drin!



  • SeppJ schrieb:

    Und die spinnerten Amis haben auch noch Buchstaben drin!

    😮
    Seit wann kann man beim einem Telefon beim wählen Buchstaben mitangeben. o_O
    Ich glaub mit meinem alten Telefon hier könnte ich gar keine Leute aus Amerika anrufen. 😞

    Also für Telefonnummern dann besser einen char* Datentyp verwenden?





  • Hi, danke erstmal für die schnelle Antwort.
    Ja wie gesagt, der Code kommt nicht von mir, sondern von nem Prof.
    Musste ihn wegen Datenschutz und Copyright gründen abändern und mir viel nix gescheites ein. Daher adresse, plz etc.

    Ziel ist es jedenfalls auf die Adresse zuzugreifen mittels der setPerson function.

    Das main nen int wieder gibt,das plz und Telefonnummer lieber als string genommen werden ist mir auch klar. War wie gesagt schnelles rauskopieren und modifizieren des Originals.

    [quote="SeppJ"]

    struct Adresse;
    

    Das Ding hat keinen Namen bei dir. Das dürfte nicht einmal compilieren. Das wäre so, als hättest du

    float;
    

    geschrieben.

    Dooooh, das war's was mir in dem Code gemuddel nicht aufgefallen ist.

    Wenn ich dürfte würde ich euch ja mal den Original Code posten, da würdest du mit den Ohren schlackern. Null überblick im da ihm Code Conventions für ihn ein Fremdwort ist.


  • Mod

    HeimlicherMitleser schrieb:

    SeppJ schrieb:

    Und die spinnerten Amis haben auch noch Buchstaben drin!

    😮
    Seit wann kann man beim einem Telefon beim wählen Buchstaben mitangeben. o_O

    Tja, guck dir mal amerikanische Telefonsexwerbung an 😃 . Wenn du auf ein dortiges Telefon guckst, verstehst du auch, was gemeint ist. 0190-739739739 ist eben nicht so gut zu merken wie 0190-SEXSEXSEX. Das ist aber auch urchaus üblich bei vielen seriösen Firmen und Privatpersonen.

    Also für Telefonnummern dann besser einen char* Datentyp verwenden?

    Ist auf jeden Fall ein Anfang. Vieles was man im Alltag "Nummer" oder "Zahl" nennt, ist in Wahrheit keine Zahl im arithmetischen Sinne. Die Differenz zweier Telefonnummern ist keine sinnvolle Größe. Aber int, float & Co. modellieren ein arithmetisches Zahlenmodell, sind daher absolut ungeeignet. Meistens sind diese "Nummern" in Wahrheit Ziffernfolgen oder, wenn man über Landesgrenzen guckt oder andere Schreibweisen zulässt, sogar Zeichenfolgen.

    Beispiele dafür sind Telefonnummern, Postleitzahlen, Kontonummern, Bankleitzahlen und viele andere mehr.

    Hausnummern sind ein interessanter Zwischenfall: Im Prinzip kann man mit Hausnummern rechnen. Zwischen den Häusern mit der Nummer 22 und 30 stehen noch 8 andere Häuser, das kann ich ausrechnen. Aber:
    1. Das funktioniert nur in Ländern, die die Häuser so wie wir benummern
    2. Ist das in der Regel ziemlich nutzlos und nicht das wozu man eine Hausnummer benutzen möchte
    3. Gilt das international wieder nicht
    4. Gilt das schon in Deutschland nicht, da es auch Hausnummern wie "14a" gibt.
    Also doch Zeichenkette, auch wenn ausnahmsweise mal ein kleiner Grund für einen Zahlentypen spricht.

    Faustregel: Kann/will man damit rechnen, dann ein arithmetischer Typ. Ansonsten ist es sehr wahrscheinlich eine Zeichenkette. Führende Nullen sind ebenfalls ein sicheres Zeichen für eine Zeichenkette.



  • Habt ja inzwischen schon was geschrieben 😉

    Zu Zeiten deines alten Telefons vermittelte dich noch das Fräulein vom Amt, wenn du über den grossen Teich verbunden werden wolltest 😉

    Die Frage ist, macht es Sinn mit Telefonnummern mathematische Operationen durchzuführen? Dürfte sehr, sehr selten der Fall sein.

    Das mit der 0 am Anfang wurde schon beschrieben.


Anmelden zum Antworten