Ein- und Ausgabe einer Postadresse mit ohne struct

Zur Einführung in das Thema Strukturen im Kapitel Spezielle Datentypen soll hier ein kleines Programm zur Ein- und Ausgabe einer Postadresse erstellt werden. Die Aufgabe lautet:


    Ein- und Ausgabe einer Postadresse

    Erstellen Sie Funktionen zur Ein- und Ausgabe einer Postadresse.

    Eine Adresse soll aus den folgenden Elementen bestehen:

    • Nachname (max. 30 Zeichen)
    • Vorname (max. 30 Zeichen)
    • Straße (max. 30 Zeichen)
    • Haustürnummer (ganze Zahl, 4 Byte)
    • Postleitzahl (ganze Zahl, 4 Byte)
    • Ort (max. 40 Zeichen)


Mit dem bisher gelernten könnte die Implementation wie folgt aussehen:


/*
Dateiname: Adresse1.c
Autor: Robert Heß & E2a
Version: 1.1
Datum: 30.10.2008
Beschreibung: Funktionen zum Ein- und Ausgeben einer Postadresse.
*/

#include <stdio.h>

/* Deklaration der Funktionen zur Adressein- und -ausgabe. */
void EingabeAdresse(char *Nachname, char *Vorname,
    char *Strasse, int *Nummer, int *PLZ, char *Ort);
void AusgabeAdresse(char Nachname[], char Vorname[],
    char Strasse[], int Nummer, int PLZ, char Ort[]);

int main()
{
    char Nachname[31]="";   /* Definition der Adressdaten */
    char Vorname[31]="";
    char Strasse[31]="";
    int Nummer;
    int PLZ;
    char Ort[41]="";

    /* Aufruf der Funktion zur Adresseingabe */
    EingabeAdresse(Nachname, Vorname, Strasse, &Nummer, &PLZ, Ort);

    /* Aufruf der Funktion zur Adressausgabe */
    AusgabeAdresse(Nachname, Vorname, Strasse, Nummer, PLZ, Ort);

    return 0;
}

/* Funktion zur Eingabe einer Adresse */
void EingabeAdresse(char *Nachname, char *Vorname,
    char *Strasse, int *Nummer, int *PLZ, char *Ort)
{
    printf("Bitte geben Sie eine Adresse ein:\n");
    printf("    Nachname: ");
    scanf("%s", Nachname);
    printf("    Vorname: ");
    scanf("%s", Vorname);
    printf("    Strasse: ");
    scanf("%s", Strasse);
    printf("    Nummer: ");
    scanf("%d", Nummer);
    printf("    Postleitzahl: ");
    scanf("%d", PLZ);
    printf("    Ort: ");
    scanf("%s", Ort);
}

/* Funktion zur Ausgabe einer Adresse */
void AusgabeAdresse(char Nachname[], char Vorname[],
    char Strasse[], int Nummer, int PLZ, char Ort[])
{
    printf("\nSie haben folgende Adresse eingegeben:\n");
    printf("    %s %s\n", Vorname, Nachname);
    printf("    %s %d\n", Strasse, Nummer);
    printf("    %d %s\n", PLZ, Ort);
}

In dem oben gezeigten Programm werden die Elemente der Posteadresse einzeln an die Funktion übergeben. C bietet die Möglichkeit, mehrere Datenelemente zu einer Struktur zu bündeln. Mit Hilfe einer solchen Struktur ist es möglich, mehrere Datenelemente als Paket zu verarbeiten und zu übergeben. Das folgende Programm verwendet diese Technik. In den Absätzen danach werden die wesentlichen Techniken dazu erläutert.


/*
Dateiname: Adresse2.c
Autor: Robert Heß & E2a
Version: 1.1
Datum: 30.10.2008
Beschreibung: Funktionen zum Ein- und Ausgeben einer Postadresse.
*/

#include <stdio.h>

/* Deklaration der Struktur für eine Adresse */
struct sAdresse {
    char Nachname[31];
    char Vorname[31];
    char Strasse[31];
    int Nummer;
    int PLZ;
    char Ort[41];
};

/* Deklaration der Funktionen zur Adressein- und -ausgabe. */
void AusgabeAdresse(struct sAdresse adr);
void EingabeAdresse(struct sAdresse *adr);

int main()
{
    /* Definition einer Adresse */
    struct sAdresse adr = { "", "", "", 0, 0, "" };

    /* Aufruf der Funktion zur Adresseingabe */
    EingabeAdresse(&adr);

    /* Aufruf der Funktion zur Adressausgabe */
    AusgabeAdresse(adr);

    return 0;
}

/* Funktion zur Ausgabe einer Adresse */
void AusgabeAdresse(struct sAdresse adr)
{
    printf("\nSie haben folgende Adresse eingegeben:\n");
    printf("    %s %s\n", adr.Vorname, adr.Nachname);
    printf("    %s %d\n", adr.Strasse, adr.Nummer);
    printf("    %d %s\n", adr.PLZ, adr.Ort);
}

/* Funktion zur Eingabe einer Adresse */
void EingabeAdresse(struct sAdresse *adr)
{
    printf("Bitte geben Sie eine Adresse ein:\n");
    printf("    Nachname: ");
    scanf("%s", adr->Nachname);
    printf("    Vorname: ");
    scanf("%s", adr->Vorname);
    printf("    Strasse: ");
    scanf("%s", adr->Strasse);
    printf("    Nummer: ");
    scanf("%d", &adr->Nummer);
    printf("    Postleitzahl: ");
    scanf("%d", &adr->PLZ);
    printf("    Ort: ");
    scanf("%s", adr->Ort);
}

Deklaration einer Struktur

Die Deklaration einer Struktur beginnt mit dem Schlüsselwort struct gefolgt von einem Bezeichner, dem Namen der Struktur. Danach folgt in geschweiften Klammern die Liste der Elemente, die zu der Struktur gehören. Die Deklaration der Elemente erfolgt nach dem gleichen Schema wie sonst Variablen definiert werden, nur muss auf die zusätzliche Festlegung mit static und register verzichtet werden. Die Deklaration einer Struktur wird mit einem Semikolon abgeschlossen.

Mit der Deklaration wird dem Compiler die neue Struktur mitgeteilt, aber es wird noch keine Variable mit dieser Struktur erzeugt. Das geschieht mit der Definition.

Definition einer Struktur

Für die Definition einer Struktur wird wieder der Begriff \verb|struct| verwendet, gefolgt von dem Namen, der bei der Deklaration vergeben wurde. Danach werden die Varaiablennamen aufgeführt. In diesem Beispiel wird eine Variable mit dem Namen adreingeführt.

Zugriff auf ein Strukturelement mit dem Punkt '.'

Liegt eine Stuktur direkt vor (nicht ein Zeiger auf die Struktur) so können die Elemente der Struktur mit einem Punkt angesprochen werden. Links vom Punkt steht der Variablenname der Struktur, wie er bei der Definition genannt wurde. Rechts vom Punkt steht der Name des Elementes, das angesprochen werden soll. Als Ergebnis erhält man das entsprechende Strukturelement.

Zugriff auf ein Strukturelement mit dem Pfeil '->'

Liegt ein Zeiger auf eine Struktur vor, so kann mit dem Pfeil (Minuszeichen und Größer-als-Zeichen) ein Element der Struktur angesprochen werden. Der Pfeil erwartet auf der linken Seite den Namen des Zeigers auf die Struktur. Auf der rechten Seite steht der Name des Elementes, das angesprochen werden soll. Als Ergebnis erhält man das entsprechende Strukturelement.

















































Seite 15