Menu
Coddy logo textTech

Alles zusammenfügen

Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 54 von 63.

challenge icon

Aufgabe

Einfach

Vervollständige dein Kontaktverwaltungssystem, indem du alle Funktionen integrierst, die du in den vorherigen Lektionen erstellt hast. Dein Programm sollte:

  1. Dieselbe Definition der Contact-Struktur aus den vorherigen Lektionen verwenden mit den Mitgliedern:
    • Ein Zeichenarray name mit der Größe 50
    • Ein Zeichenarray phone mit der Größe 20
    • Ein Zeichenarray email mit der Größe 40
    • Eine Ganzzahl age
  2. Dieselbe createContact-Funktion aus den vorherigen Lektionen verwenden, die:
    • Dynamisch Speicher für eine Contact-Struktur reserviert
    • Alle Mitglieder mit Standardwerten initialisiert
    • Einen Zeiger auf den Kontakt zurückgibt
  3. Dieselbe populateContact-Funktion aus den vorherigen Lektionen verwenden, die:
    • Einen Zeiger auf eine Contact-Struktur als Parameter entgegennimmt
    • Zur Eingabe durch den Benutzer auffordert und alle Kontaktfelder ausfüllt
    • Die Eingabedaten validiert
  4. Eine displayContact-Funktion schreiben, die:
    • Einen konstanten Zeiger auf eine Contact-Struktur als Parameter entgegennimmt
    • Jedes Feld in einer eigenen Zeile in diesem exakten Format ausgibt:
      Name: John
      Phone: 555-1234
      Email: john@email.com
      Age: 25
  5. Eine Funktion namens updateContact schreiben, die:
    • Einen Zeiger auf eine Contact-Struktur als Parameter entgegennimmt
    • Nichts zurückgibt (void)
    • Den Benutzer auffordert, das zu aktualisierende Feld auszuwählen, indem sie Folgendes ausgibt:
      • What would you like to update?
      • 1. Name
      • 2. Phone
      • 3. Email
      • 4. Age
      • Enter choice (1-4):
    • Die Auswahl des Benutzers einliest und das entsprechende Feld aktualisiert:
      • Wenn die Auswahl 1 ist: Gibt Enter new name: aus und aktualisiert den Namen
      • Wenn die Auswahl 2 ist: Gibt Enter new phone: aus und aktualisiert die Telefonnummer
      • Wenn die Auswahl 3 ist: Gibt Enter new email: aus und aktualisiert die E-Mail-Adresse
      • Wenn die Auswahl 4 ist: Gibt Enter new age: aus und aktualisiert das Alter
      • Wenn die Auswahl ungültig ist (nicht 1–4): Gibt Invalid choice aus
    • Nach einer erfolgreichen Aktualisierung Contact updated successfully ausgeben
  6. In der main-Funktion einen vollständigen Workflow zur Kontaktverwaltung implementieren:
    • Einen Kontakt mithilfe der Funktion createContact erstellen
    • Überprüfen, ob die Erstellung des Kontakts erfolgreich war
    • Die Funktion populateContact aufrufen, um die anfänglichen Kontaktdaten einzugeben
    • --- Initial Contact --- ausgeben
    • Die Funktion displayContact aufrufen, um die anfänglichen Kontaktinformationen anzuzeigen
    • --- Updating Contact --- ausgeben
    • Die Funktion updateContact aufrufen, um ein Feld zu ändern
    • --- Updated Contact --- ausgeben
    • Die Funktion displayContact erneut aufrufen, um die aktualisierten Kontaktinformationen anzuzeigen
    • Den dynamisch reservierten Speicher freigeben
    • Contact management completed ausgeben

Hinweis: Die Funktion displayContact in dieser Lektion verwendet ein einfaches Format: eine Zeile pro Feld ohne zusätzliche Details oder Einheiten (z. B. wird das Alter als einfache Zahl ausgegeben, nicht als „25 Jahre alt“). Achte darauf, dass deine Ausgabe exakt dem oben gezeigten Format entspricht, da die Testfälle davon abhängen.

Diese abschließende Herausforderung verbindet alle Bestandteile deines Kontaktverwaltungssystems: Strukturdefinition, dynamische Speicherreservierung, Dateneingabe und -validierung, formatierte Ausgabe und Datenänderung. Du demonstrierst den vollständigen Lebenszyklus einer dynamisch reservierten Struktur – von der Erstellung bis zur Speicherfreigabe – und übst dabei die Organisation von Funktionen sowie die korrekte Verwendung von Zeigern während des gesamten Prozesses.

Probier es selbst

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Contact {
    char name[50];
    char phone[20];
    char email[40];
    int age;
};

struct Contact* createContact() {
    struct Contact* contact = (struct Contact*)malloc(sizeof(struct Contact));
    if (contact != NULL) {
        strcpy(contact->name, "");
        strcpy(contact->phone, "");
        strcpy(contact->email, "");
        contact->age = 0;
    }
    return contact;
}

void populateContact(struct Contact* contactPtr) {
    printf("Enter name: ");
    fgets(contactPtr->name, sizeof(contactPtr->name), stdin);
    contactPtr->name[strcspn(contactPtr->name, "\n")] = '\0';
    
    printf("Enter phone: ");
    fgets(contactPtr->phone, sizeof(contactPtr->phone), stdin);
    contactPtr->phone[strcspn(contactPtr->phone, "\n")] = '\0';
    
    printf("Enter email: ");
    fgets(contactPtr->email, sizeof(contactPtr->email), stdin);
    contactPtr->email[strcspn(contactPtr->email, "\n")] = '\0';
    
    printf("Enter age: ");
    scanf("%d", &contactPtr->age);
}

void displayContact(const struct Contact *contactPtr) {
    printf("=== CONTACT DETAILS ===\n");
    printf("Name: %s\n", contactPtr->name);
    printf("Phone: %s\n", contactPtr->phone);
    printf("Email: %s\n", contactPtr->email);
    printf("Age: %d years old\n", contactPtr->age);
    printf("========================\n");
    
    printf("Name length: %lu characters\n", strlen(contactPtr->name));
    
    if (contactPtr->age >= 0 && contactPtr->age <= 12) {
        printf("Generation: Child\n");
    } else if (contactPtr->age >= 13 && contactPtr->age <= 19) {
        printf("Generation: Teenager\n");
    } else if (contactPtr->age >= 20 && contactPtr->age <= 39) {
        printf("Generation: Young Adult\n");
    } else if (contactPtr->age >= 40 && contactPtr->age <= 59) {
        printf("Generation: Middle-aged Adult\n");
    } else if (contactPtr->age >= 60) {
        printf("Generation: Senior\n");
    }
    
    if (strchr(contactPtr->email, '@') != NULL) {
        printf("Email format: Valid\n");
    } else {
        printf("Email format: Invalid\n");
    }
}

int main() {
    struct Contact* contact = createContact();
    
    if (contact != NULL) {
        populateContact(contact);
        displayContact(contact);
        free(contact);
        printf("Program completed successfully\n");
    }
    
    return 0;
}

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C-Compiler