Podsumowanie: modyfikowanie struktury — wskaźnik
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 49 z 63.
Wyzwanie
ŁatwyUtwórz program w C, który demonstruje kompletny system zarządzania pracownikami, wykorzystujący dynamiczną alokację pamięci, wskaźniki do struktur i funkcje. Twój program powinien:
- Zdefiniować
structo nazwieEmployeez następującymi składowymi:- Liczbę całkowitą
iddo przechowywania identyfikatora pracownika - Tablicę znaków
nameo rozmiarze 50 do przechowywania imienia i nazwiska pracownika - Tablicę znaków
departmento rozmiarze 30 do przechowywania nazwy działu - Liczbę zmiennoprzecinkową
salarydo przechowywania wynagrodzenia pracownika - Liczbę całkowitą
yearsOfServicedo przechowywania stażu pracy
- Liczbę całkowitą
- Napisać funkcję o nazwie
fillEmployeeData, która:- Przyjmuje jako parametr wskaźnik do struktury
Employee - Odczytuje z wejścia informacje o pracowniku w następującej kolejności: identyfikator, imię i nazwisko, dział, wynagrodzenie, staż pracy
- Przypisuje wartości do składowych struktury za pomocą operatora strzałki
- Oblicza premię na podstawie stażu pracy: jeśli liczba lat >= 5, premia wynosi 10% wynagrodzenia, w przeciwnym razie 5% wynagrodzenia
- Dodaje premię do wynagrodzenia:
empPtr->salary += bonus;
- Przyjmuje jako parametr wskaźnik do struktury
- Napisać funkcję o nazwie
displayEmployee, która:- Przyjmuje jako parametr wskaźnik do struktury
Employee - Wyświetla informacje o pracowniku w dokładnie następującym formacie:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- Przyjmuje jako parametr wskaźnik do struktury
- Napisać funkcję o nazwie
promoteEmployee, która:- Przyjmuje jako parametr wskaźnik do struktury
Employee - Zwiększa wynagrodzenie o 15% za pomocą operatora strzałki
- Zwiększa staż pracy o 1
- Wyświetla
Employee promoted successfully!
- Przyjmuje jako parametr wskaźnik do struktury
- W funkcji main:
- Zadeklarować wskaźnik do struktury
Employeeo nazwieempPtr - Użyć
malloc(), aby dynamicznie zaalokować pamięć dla jednej strukturyEmployee - Sprawdzić, czy alokacja pamięci się powiodła:
- Jeśli
empPtrma wartośćNULL, wyświetlićMemory allocation failedi zakończyć program - Jeśli się powiodła, wyświetlić
Memory allocated successfully
- Jeśli
- Wywołać
fillEmployeeData, aby wypełnić dane pracownika - Wyświetlić
Initial employee data: - Wywołać
displayEmployee, aby pokazać początkowe informacje o pracowniku - Wywołać
promoteEmployee, aby awansować pracownika - Wyświetlić
After promotion: - Ponownie wywołać
displayEmployee, aby pokazać zaktualizowane informacje - Zwolnić dynamicznie zaalokowaną pamięć za pomocą
free(empPtr) - Wyświetlić
Memory freed successfully
- Zadeklarować wskaźnik do struktury
To wyzwanie łączy wszystkie kluczowe zagadnienia z tego rozdziału: definiowanie struktur, dynamiczną alokację pamięci za pomocą malloc(), sprawdzanie, czy alokacja się nie powiodła, przekazywanie wskaźników do struktur do funkcji, używanie operatora strzałki do uzyskiwania dostępu do składowych struktury i ich modyfikowania oraz prawidłowe zwalnianie pamięci za pomocą free(). Funkcje pokazują, jak wskaźniki umożliwiają bezpośrednią modyfikację danych w oryginalnej strukturze.
Spróbuj swoich sił
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Zdefiniuj tutaj strukturę Employee
// TODO: Zaimplementuj tutaj funkcję fillEmployeeData
// TODO: Zaimplementuj tutaj funkcję displayEmployee
// TODO: Zaimplementuj tutaj funkcję promoteEmployee
int main() {
// TODO: Zadeklaruj empPtr i przydziel pamięć
// TODO: Sprawdź, czy przydzielenie pamięci się powiodło
// TODO: Wypełnij dane pracownika, wyświetl dane początkowe, awansuj pracownika i wyświetl dane po awansie
// TODO: Zwolnij pamięć i wypisz komunikat o powodzeniu
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ówPoćwicz samodzielnie: Kompilator C online