Menu
Coddy logo textTech

Funkcja tworząca kontakt

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 51 z 63.

challenge icon

Wyzwanie

Łatwy

Opierając się na strukturze Contact z poprzedniej lekcji, utwórz funkcję, która dynamicznie przydziela pamięć dla nowego kontaktu. Twój program powinien:

  1. Użyć tej samej definicji struktury Contact z poprzedniej lekcji, zawierającej pola:
    • Tablicę znaków name o rozmiarze 50
    • Tablicę znaków phone o rozmiarze 20
    • Tablicę znaków email o rozmiarze 40
    • Liczbę całkowitą age
  2. Napisać funkcję o nazwie createContact, która:
    • Nie przyjmuje żadnych parametrów
    • Zwraca wskaźnik do struktury Contact
    • Używa malloc() do dynamicznego przydzielenia pamięci dla jednej struktury Contact
    • Sprawdza, czy przydzielenie pamięci się powiodło:
      • Jeśli przydzielenie się nie powiedzie (zwraca NULL), wyświetla Memory allocation failed i zwraca NULL
      • Jeśli przydzielenie się powiedzie, wyświetla Contact created successfully
    • Inicjalizuje wszystkie pola struktury wartościami domyślnymi, używając operatora strzałki:
      • Ustawia name na pusty ciąg znaków za pomocą contactPtr->name[0] = '\0';
      • Ustawia phone na pusty ciąg znaków za pomocą contactPtr->phone[0] = '\0';
      • Ustawia email na pusty ciąg znaków za pomocą contactPtr->email[0] = '\0';
      • Ustawia age na 0 za pomocą contactPtr->age = 0;
    • Zwraca wskaźnik do nowo utworzonego kontaktu
  3. W funkcji main:
    • Deklaruje wskaźnik do struktury Contact o nazwie newContact
    • Wywołuje funkcję createContact i przypisuje zwrócony wskaźnik do newContact
    • Sprawdza, czy utworzenie kontaktu się powiodło:
      • Jeśli newContact ma wartość NULL, wyświetla Failed to create contact i kończy działanie programu
      • Jeśli się powiedzie, wyświetla Contact initialized with default values
    • Wyświetla zainicjalizowane informacje o kontakcie, używając operatora strzałki, w dokładnie tym formacie:
      • Default Contact Values:
      • Name: [name] (będzie puste)
      • Phone: [phone] (będzie puste)
      • Email: [email] (będzie puste)
      • Age: [age] (będzie równe 0)
    • Zwalnia dynamicznie przydzieloną pamięć za pomocą free(newContact)
    • Wyświetla Memory freed successfully

To wyzwanie wprowadza pojęcie funkcji fabrykujących — funkcji, które tworzą i zwracają wskaźniki do dynamicznie przydzielonych struktur. Przećwiczysz dynamiczne przydzielanie pamięci, prawidłowe sprawdzanie błędów, inicjalizowanie struktur za pośrednictwem wskaźników oraz zwalnianie pamięci.

Spróbuj swoich sił

#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;
}

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online