Funkcja wypełniająca dane kontaktu
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 52 z 63.
Wyzwanie
ŁatwyKontynuują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:
- Użyć tej samej definicji struktury
Contactco w poprzednich lekcjach, z polami:- Tablica znaków
nameo rozmiarze 50 - Tablica znaków
phoneo rozmiarze 20 - Tablica znaków
emailo rozmiarze 40 - Liczba całkowita
age
- Tablica znaków
- Użyć tej samej funkcji
createContactco w poprzedniej lekcji, która:- Dynamicznie przydziela pamięć dla struktury
Contact - Inicjalizuje wszystkie pola wartościami domyślnymi
- Zwraca wskaźnik do kontaktu
- Dynamicznie przydziela pamięć dla struktury
- Napisać funkcję o nazwie
populateContact, która:- Przyjmuje wskaźnik do struktury
Contactjako 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)
- Wyświetla
- 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świetlaInvalid phone number - Jeśli wszystkie kontrole poprawności zakończą się powodzeniem, wyświetla
Contact populated successfully
- Jeśli wiek jest mniejszy niż 0 lub większy niż 120, wyświetla
- Przyjmuje wskaźnik do struktury
- 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
- Utworzyć kontakt za pomocą funkcji
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
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znaków6Zarządzanie pamięcią
Pamięć stosu a stertyAlokacja dynamiczna — malloc()Użycie sizeof() do alokacjiSprawdzanie niepowodzenia alokacjiZwalnianie pamięci za pomocą free()Alokacja za pomocą calloc()Podsumowanie: tablica dynamiczna9Projekt: Prosty wpis kontaktu
Projekt: Definiowanie struktury kontaktuFunkcja tworząca kontaktPoćwicz samodzielnie: Kompilator C online