Menu
Coddy logo textTech

Funktion zum Erstellen eines Kontakts

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

challenge icon

Aufgabe

Einfach

Aufbauend auf deiner Contact-Struktur aus der vorherigen Lektion erstellst du eine Funktion, die dynamisch Speicher für einen neuen Kontakt reserviert. Dein Programm sollte:

  1. Dieselbe Contact-Strukturdefinition aus der vorherigen Lektion mit folgenden Mitgliedern verwenden:
    • 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. Eine Funktion namens createContact schreiben, die:
    • Keine Parameter entgegennimmt
    • Einen Zeiger auf eine Contact-Struktur zurückgibt
    • malloc() verwendet, um dynamisch Speicher für eine Contact-Struktur zu reservieren
    • Überprüft, ob die Speicherreservierung erfolgreich war:
      • Wenn die Reservierung fehlschlägt (NULL zurückgibt), Memory allocation failed ausgibt und NULL zurückgibt
      • Wenn die Reservierung erfolgreich ist, Contact created successfully ausgibt
    • Alle Strukturmitglieder mithilfe des Pfeiloperators auf Standardwerte initialisiert:
      • name mithilfe von contactPtr->name[0] = '\0'; auf eine leere Zeichenkette setzt
      • phone mithilfe von contactPtr->phone[0] = '\0'; auf eine leere Zeichenkette setzt
      • email mithilfe von contactPtr->email[0] = '\0'; auf eine leere Zeichenkette setzt
      • age mithilfe von contactPtr->age = 0; auf 0 setzt
    • Den Zeiger auf den neu erstellten Kontakt zurückgibt
  3. In der Funktion main:
    • Einen Zeiger auf eine Contact-Struktur namens newContact deklarieren
    • Die Funktion createContact aufrufen und den zurückgegebenen Zeiger newContact zuweisen
    • Überprüfen, ob die Kontakterstellung erfolgreich war:
      • Wenn newContact NULL ist, Failed to create contact ausgeben und das Programm beenden
      • Bei Erfolg Contact initialized with default values ausgeben
    • Die initialisierten Kontaktinformationen mithilfe des Pfeiloperators in genau diesem Format anzeigen:
      • Default Contact Values:
      • Name: [name] (wird leer sein)
      • Phone: [phone] (wird leer sein)
      • Email: [email] (wird leer sein)
      • Age: [age] (wird 0 sein)
    • Den dynamisch reservierten Speicher mithilfe von free(newContact) freigeben
    • Memory freed successfully ausgeben

Diese Herausforderung führt das Konzept von Fabrikfunktionen ein – Funktionen, die Zeiger auf dynamisch reservierte Strukturen erstellen und zurückgeben. Du übst dabei die dynamische Speicherreservierung, die korrekte Fehlerüberprüfung, die Initialisierung von Strukturen über Zeiger und die Speicherbereinigung.

Probier es selbst

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

// TODO: Define the Contact struct here
struct Contact {
    char name[50];
    char phone[20];
    char email[40];
    int age;
};

int main() {
    // TODO: Create a Contact variable named person
    struct Contact person;
    
    // Read input values
    scanf("%s", person.name);
    scanf("%s", person.phone);
    scanf("%s", person.email);
    scanf("%d", &person.age);
    
    // TODO: Write your validation and output code below
    if (person.age < 0 || person.age > 120) {
        printf("Invalid age");
        return 0;
    }
    
    if (strlen(person.phone) < 10) {
        printf("Invalid phone number");
        return 0;
    }
    
    printf("Contact Information:\n");
    printf("Name: %s\n", person.name);
    printf("Phone: %s\n", person.phone);
    printf("Email: %s\n", person.email);
    printf("Age: %d\n", person.age);
    
    printf("Name length: %lu\n", strlen(person.name));
    
    if (person.age >= 0 && person.age <= 17) {
        printf("Category: Minor");
    } else if (person.age >= 18 && person.age <= 64) {
        printf("Category: Adult");
    } else {
        printf("Category: Senior");
    }
    
    return 0;
}

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C-Compiler