Menu
Coddy logo textTech

Funkcja wypełniająca dane kontaktu

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

challenge icon

Wyzwanie

Łatwy

Kontynuując pracę nad funkcją tworzenia kontaktu z poprzedniej lekcji, utwórz funkcję, która wypełnia dane kontaktu na podstawie danych wprowadzonych przez użytkownika. Twój program powinien:

  1. Użyć tej samej definicji struktury Contact co w poprzednich lekcjach, z polami:
    • Tablica znaków name o rozmiarze 50
    • Tablica znaków phone o rozmiarze 20
    • Tablica znaków email o rozmiarze 40
    • Liczba całkowita age
  2. Użyć tej samej funkcji createContact co w poprzedniej lekcji, która:
    • Dynamicznie przydziela pamięć dla struktury Contact
    • Inicjalizuje wszystkie pola wartościami domyślnymi
    • Zwraca wskaźnik do kontaktu
  3. Napisać funkcję o nazwie populateContact, która:
    • Przyjmuje wskaźnik do struktury Contact jako parametr
    • Nic nie zwraca (void)
    • Wyświetla prośby o dane i odczytuje poniższe dane w tej dokładnej kolejności:
      • Wyświetla Enter name: i odczytuje ciąg znaków do pola name za pomocą scanf("%s", contactPtr->name)
      • Wyświetla Enter phone: i odczytuje ciąg znaków do pola phone za pomocą scanf("%s", contactPtr->phone)
      • Wyświetla Enter email: i odczytuje ciąg znaków do pola email za pomocą scanf("%s", contactPtr->email)
      • Wyświetla Enter age: i odczytuje liczbę całkowitą do pola age za pomocą scanf("%d", &contactPtr->age)
    • Po odczytaniu wszystkich danych sprawdza ich poprawność:
      • Jeśli wiek jest mniejszy niż 0 lub większy niż 120, wyświetla Invalid age entered
      • Jeśli numer telefonu ma mniej niż 10 znaków (użyj strlen()), wyświetla Invalid phone number
      • Jeśli wszystkie kontrole poprawności zakończą się powodzeniem, wyświetla Contact populated successfully
  4. W funkcji main:
    • Utworzyć kontakt za pomocą funkcji createContact
    • Sprawdzić, czy utworzenie kontaktu się powiodło
    • Wywołać funkcję populateContact, aby wypełnić dane kontaktu
    • Po wypełnieniu danych wyświetlić informacje o kontakcie za pomocą operatora strzałki, w tym dokładnym formacie:
      • Contact Information:
      • Name: [name]
      • Phone: [phone]
      • Email: [email]
      • Age: [age]
    • Zwolnić dynamicznie przydzieloną pamięć
    • Wyświetlić Contact deleted successfully

To wyzwanie pokazuje, jak tworzyć funkcje, które modyfikują dane struktury za pomocą wskaźników. Funkcja populateContact otrzymuje wskaźnik do kontaktu i używa operatora strzałki, aby bezpośrednio modyfikować pola oryginalnej struktury. Przećwiczysz obsługę danych wejściowych użytkownika, sprawdzanie poprawności danych oraz pracę z dynamicznie przydzielanymi strukturami przekazywanymi jako parametry funkcji.

Spróbuj swoich sił

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

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

struct Contact* createContact() {
    struct Contact* contactPtr = (struct Contact*)malloc(sizeof(struct Contact));
    
    if (contactPtr == NULL) {
        printf("Memory allocation failed\n");
        return NULL;
    }
    
    printf("Contact created successfully\n");
    
    contactPtr->name[0] = '\0';
    contactPtr->phone[0] = '\0';
    contactPtr->email[0] = '\0';
    contactPtr->age = 0;
    
    return contactPtr;
}

int main() {
    struct Contact* newContact;
    
    newContact = createContact();
    
    if (newContact == NULL) {
        printf("Failed to create contact\n");
        return 1;
    }
    
    printf("Contact initialized with default values\n");
    
    printf("Default Contact Values:\n");
    printf("Name: %s\n", newContact->name);
    printf("Phone: %s\n", newContact->phone);
    printf("Email: %s\n", newContact->email);
    printf("Age: %d\n", newContact->age);
    
    free(newContact);
    printf("Memory freed successfully\n");
    
    return 0;
}

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online