Özet: Yapıyı Değiştirme - Ptr
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 49 / 63.
Görev
KolayDinamik bellek tahsisi, struct işaretçileri ve fonksiyonları kullanarak eksiksiz bir çalışan yönetim sistemini gösteren bir C programı oluşturun. Programınız şunları yapmalıdır:
- Aşağıdaki üyelere sahip
Employeeadında birstructtanımlayın:- Çalışan kimliğini saklamak için bir tam sayı
id - Çalışan adını saklamak için 50 boyutunda bir karakter dizisi
name - Departman adını saklamak için 30 boyutunda bir karakter dizisi
department - Çalışan maaşını saklamak için bir float
salary - Hizmet yılını saklamak için bir tam sayı
yearsOfService
- Çalışan kimliğini saklamak için bir tam sayı
- Şu işlevleri yerine getiren
fillEmployeeDataadında bir fonksiyon yazın:- Parametre olarak bir
Employeestruct işaretçisi alır - Girişten şu sırayla çalışan bilgilerini okur: ID, ad, departman, maaş, hizmet yılı
- Ok ok operatörünü kullanarak değerleri struct üyelerine atar
- Hizmet yılına göre bir bonus hesaplar: eğer years >= 5 ise bonus maaşın %10'u, aksi takdirde %5'idir
- Bonusu maaşa ekler:
empPtr->salary += bonus;
- Parametre olarak bir
- Şu işlevleri yerine getiren
displayEmployeeadında bir fonksiyon yazın:- Parametre olarak bir
Employeestruct işaretçisi alır - Çalışan bilgilerini tam olarak şu formatta yazdırır:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- Parametre olarak bir
- Şu işlevleri yerine getiren
promoteEmployeeadında bir fonksiyon yazın:- Parametre olarak bir
Employeestruct işaretçisi alır - Ok operatörünü kullanarak maaşı %15 artırır
- Hizmet yılını 1 artırır
Employee promoted successfully!yazdırır
- Parametre olarak bir
- Main fonksiyonu içinde:
empPtradında birEmployeestruct işaretçisi tanımlayın- Bir
Employeestruct'ı için dinamik olarak bellek ayırmak üzeremalloc()kullanın - Bellek tahsisinin başarılı olup olmadığını kontrol edin:
- Eğer
empPtrdeğeriNULLise,Memory allocation failedyazdırın ve programdan çıkın - Başarılıysa,
Memory allocated successfullyyazdırın
- Eğer
- Çalışan verilerini doldurmak için
fillEmployeeDatafonksiyonunu çağırın Initial employee data:yazdırın- Başlangıç çalışan bilgilerini göstermek için
displayEmployeefonksiyonunu çağırın - Çalışanı terfi ettirmek için
promoteEmployeefonksiyonunu çağırın After promotion:yazdırın- Güncellenmiş bilgileri göstermek için
displayEmployeefonksiyonunu tekrar çağırın free(empPtr)kullanarak dinamik olarak ayrılan belleği serbest bırakınMemory freed successfullyyazdırın
Bu meydan okuma, bölümdeki tüm temel kavramları birleştirir: struct tanımlama, malloc() ile dinamik bellek tahsisi, tahsis hatasını kontrol etme, struct işaretçilerini fonksiyonlara geçirme, struct üyelerine erişmek ve bunları değiştirmek için ok operatörünü kullanma ve free() ile uygun bellek temizliği. Fonksiyonlar, işaretçilerin orijinal struct verilerinin doğrudan değiştirilmesine nasıl izin verdiğini gösterir.
Kendin dene
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Employee yapısını burada tanımlayın
// TODO: fillEmployeeData fonksiyonunu burada uygulayın
// TODO: displayEmployee fonksiyonunu burada uygulayın
// TODO: promoteEmployee fonksiyonunu burada uygulayın
int main() {
// TODO: empPtr'yi bildirin ve bellek ayırın
// TODO: Bellek ayırma işleminin başarılı olup olmadığını kontrol edin
// TODO: Çalışan verilerini doldurun, ilk verileri görüntüleyin, terfi ettirin ve terfi sonrası verileri görüntüleyin
// TODO: Belleği serbest bırakın ve başarı mesajını yazdırın
return 0;
}Logic & Flow bölümündeki tüm dersler
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String Fonksiyonları