Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Struktur und Pointer

Empfohlene Antworten

Hi,

wir haben die Aufgabe gekriegt ein Programm zu schreiben, das der Mitgliedsverwaltung dient. In der Aufgabe steht: Es sollen immer nu Pointer auf den jeweiligen Eintrag übergeben werden.

Wir haben bisher das:


#include <stdio.h>


struct

{

    char Vorname[40];

    char Nachname[40];

    int Nummer;

    int Telefon;

}mitglied;


void ausgabe()

{

    printf("%s",mitglied.Vorname);

}


void eingabe()

{

    printf("Geben Sie den Vornamen ein");

    gets(mitglied.Vorname);

}


int main()

{

    int a;

    while(a!=0)

    {

        printf("Willkommen im Mitgliedsverzeichnis\n");

        printf(":----------------------------------------\n");

        printf("Aus Gruenden des Datenschutzes werden\n");

        printf("keine Eintraege dauerhaft gespeichert.\n");

        printf(":----------------------------------------\n\n");

        printf("1. Ausgabe eines vorhandenen Eintrages\n");

        printf("2. Anlegen eines neuen Eintrages\n");

        printf("0. Beenden\n");

        printf("Eingabe:");

        scanf("%d",&a);

        switch(a)

        {

            case 0:

            {

                return(0);

                break;

            }

            case 1:

            {

                ausgabe();

                break;

            }

            case 2:

            {

                eingabe();

                break;

            }

        }

    }

}

Wir haben erstmal das nur mit Vorname gemacht um die Funktionsweise zu probieren. Und natürlich geht es nciht. Wenn man die 2 wählt, um einen Eintrag zu erstellen schreibt er zwar, dass man den Vornamen eingeben soll, printet dann aber sofort wieder das "Hauptmenü". Scheinbar klappt die Eingabe schon und das ausgeben lassen, er macht nur zu oft dieses Menü.

Zweites Problem: Wo soll man da denn Zeiger einbauen?

Vielen vielen Dank schonmal

Wir haben erstmal das nur mit Vorname gemacht um die Funktionsweise zu probieren. Und natürlich geht es nciht. Wenn man die 2 wählt, um einen Eintrag zu erstellen schreibt er zwar, dass man den Vornamen eingeben soll, printet dann aber sofort wieder das "Hauptmenü".

Das liegt daran, dass gets zuerst den Zeilenumbruch aus dem Eingabepuffer holt, den scanf dort liegengelassen hat.

gets solltest du übrigens nicht verwenden. Diese Funktion ist unsicher. Nimm fgets.

Zweites Problem: Wo soll man da denn Zeiger einbauen?
Das sollte sich von selbst ergeben, sobald du von deinem einzigen globalen Eintragsobjekt wegkommst. Erstens sollst du mit Sicherheit keine globalen Variabeln verwenden, und zweitens kann man mit einem einzelnen Strukturobjekt nicht viel verwalten.

es hat sich noch nciht viel verändert, aber es sieht mittlerweile so aus:


#include <stdio.h>


struct

{

    char Vorname[40];

    char Nachname[40];

    char Nummer[40];

    char Telefon[40];

}mitglied;


void ausgabe()

{

    printf("%s",mitglied.Vorname);

    printf("%s",mitglied.Nachname);

    printf("%s",mitglied.Nummer);

    printf("%s",mitglied.Telefon);

}


void eingabe()

{

    printf("Geben Sie den Vornamen ein\n");

    fgets(mitglied.Vorname, 40, stdin);

    printf("Geben Sie den Nachnamen ein\n");

    fgets(mitglied.Nachname, 40, stdin);

    printf("Geben Sie die Mitgliedsnummer ein\n");

    fgets(mitglied.Nummer,40,stdin);

    printf("Geben Sie die Telefonnummer ein\n");

    fgets(mitglied.Telefon,40,stdin);

}


int main()

{

    int a;

    while(a!=0)

    {

        printf("Willkommen im Mitgliedsverzeichnis\n");

        printf(":----------------------------------------\n");

        printf("Aus Gruenden des Datenschutzes werden\n");

        printf("keine Eintraege dauerhaft gespeichert.\n");

        printf(":----------------------------------------\n\n");

        printf("1. Ausgabe eines vorhandenen Eintrages\n");

        printf("2. Anlegen eines neuen Eintrages\n");

        printf("0. Beenden\n");

        printf("Eingabe:");

        scanf("%d",&a);

        switch(a)

        {

            case 0:

            {

                return(0);

                break;

            }

            case 1:

            {

                ausgabe();

                break;

            }

            case 2:

            {

                eingabe();

                break;

            }

        }

    }

}

Leider habe ich keine Idee, wie ich diesen Zeilenumbruch vom scanf wegkriegen soll. Habe schon einiges durchprobiert, aber da diese Auswahl mit 1,2 und 0 vorgegeben ist, schränkt das für mich das ziemlich ein.

Zu den Pointern. Es kann vllt sein, dass ich noch nciht so ganz gerafft habe, wozu die gut sind. Aber ich habe mich auch schon gefragt, wie ich denn bei meinem Programm mehrere Einträge speichern soll, und das geht wahrscheinlich damit, richtig?

Könnte das jemand vllt in kurze Worte fassen? Habe Wikipedia und so gelesne, aber das is mir etwas zu abstrakt. Es fällt mir sicher leichter zu verstehen, wenn ich das auf (m)ein Beispiel bezogen erklärt kriege.

Vielen Dank schonmal

Leider habe ich keine Idee, wie ich diesen Zeilenumbruch vom scanf wegkriegen soll.

Versuch es mal mit einem fflush (stdin) nach dem scanf() ... das sollte dir eigentlich den Puffer leeren und damit auch den verbliebenen Zeilenumbruch entfernen.

Aber ich habe mich auch schon gefragt, wie ich denn bei meinem Programm mehrere Einträge speichern soll, und das geht wahrscheinlich damit, richtig?
Es gibt mehrere Möglichkeiten, das zu tun. Du brauchst eine passende Datenstruktur, z.B. ein Array oder eine Liste. Offenbar sollst du für diese Aufgabe bereits in der Lage sein, so etwas zu benutzen. Sagt dir malloc etwas?

Die schleife mit dem getchar ist gut. Das hast du mir ja schonmal geraten. Das werd ich auf jeden Flal nun ncihtmehr fragen. Habe jetzt grade nochmal ne 3/4 Stunde mich über Pointer informiert. Jetzt weiß ich was die machen. Aber dann versteh ich die Aufgabe nicht zum einen und verstehe nicht, wo die Sinn machen würden.

Und malloc hatten wir noch nicht. Du sagst, ich brauche dafür ein Array oder eine Liste. So, dass dann jeder Mitgliedseintrag ein Eintrag in einer Liste ist, oder wie kann ich mir das vorstellen?

Und malloc hatten wir noch nicht. Du sagst, ich brauche dafür ein Array oder eine Liste. So, dass dann jeder Mitgliedseintrag ein Eintrag in einer Liste ist, oder wie kann ich mir das vorstellen?
Genau. Ohne malloc hast du aber nicht die Möglichkeit, solche Datenstrukturen dynamisch zu verwalten. Ohne malloc bleibt dir nur die Möglichkeit, ein Array mit vorher festgelegter Größe anzulegen, und dieses nach und nach zu füllen.

Ich überlege grade, ob man das überhaupt muss. Würdest du die Aufgabe so verstehen?

Erstellen Sie ein Programm, welches die Mitglieder eines Vereins verwaltet. Definieren Sie

für die Mitgliedseinträge eine geeignete Struktur (bestehend aus Vorname, Nachname, Mitgliedsnummer

und Telefonnummer). Schreiben Sie dann eine Funktion mit der Aufgabe, per

Dialog einen Mitgliedseintrag auszufüllen und eine andere Funktion, die für die Ausgabe eines

einzelnen Eintrags zuständig ist. Hier sollen selbstverständlich immer nur Pointer auf den

jeweiligen Eintrag übergeben werden. Im Hauptprogramm gibt es ein Menü, in dem man die

jeweiligen Funktionalitäten und Einträge auswählen kann.

Kann man so verstehen, muss man aber nciht, oder?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.