Özet: Yapıyı Değiştirme - Ptr
Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 49 / 63.
Görev
KolayDinamik bellek ayırma, struct işaretçileri ve fonksiyonları kullanarak eksiksiz bir çalışan yönetim sistemi gösteren bir C programı oluştur. Programın şunları yapması gerekir:
- Aşağıdaki üyelere sahip
structadlı birEmployeetanımla:- Çalışan kimliğini saklamak için bir tamsayı
id - Çalışanın adını saklamak için boyutu 50 olan bir karakter dizisi
name - Departman adını saklamak için boyutu 30 olan bir karakter dizisi
department - Çalışanın maaşını saklamak için bir kayan noktalı sayı
salary - Hizmet yılını saklamak için bir tamsayı
yearsOfService
- Çalışan kimliğini saklamak için bir tamsayı
- Şunları yapan
fillEmployeeDataadlı bir fonksiyon yaz:- Parametre olarak bir
Employeestruct işaretçisi alır - Çalışan bilgilerini şu sırayla girdiden okur: kimlik, ad, departman, maaş, hizmet yılı
- Değerleri ok operatörünü kullanarak struct üyelerine atar
- Hizmet yılına göre prim hesaplar: yıl >= 5 ise prim maaşın %10'u, aksi takdirde maaşın %5'idir
- Primi maaşa ekler:
empPtr->salary += bonus;
- Parametre olarak bir
- Şunları yapan
displayEmployeeadlı bir fonksiyon yaz:- Parametre olarak bir
Employeestruct işaretçisi alır - Çalışan bilgilerini tam olarak şu biçimde yazdırır:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- Parametre olarak bir
- Şunları yapan
promoteEmployeeadlı bir fonksiyon yaz:- 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 fonksiyonunda:
Employeeadlı birempPtrstruct işaretçisi tanımla- Bir
malloc()struct için dinamik olarak bellek ayırmak üzereEmployeekullan - Bellek ayırma işleminin başarılı olup olmadığını kontrol et:
empPtrdeğeriNULLiseMemory allocation failedyazdır ve programdan çık- Başarılı olursa
Memory allocated successfullyyazdır
- Çalışan verilerini doldurmak için
fillEmployeeDatafonksiyonunu çağır Initial employee data:yazdır- Başlangıç çalışan bilgilerini göstermek için
displayEmployeefonksiyonunu çağır - Çalışanı terfi ettirmek için
promoteEmployeefonksiyonunu çağır After promotion:yazdır- Güncellenmiş bilgileri göstermek için
displayEmployeefonksiyonunu tekrar çağır free(empPtr)kullanarak dinamik olarak ayrılmış belleği serbest bırakMemory freed successfullyyazdır
Bu alıştırma, bölümdeki tüm temel kavramları bir araya getirir: struct tanımlama, malloc() ile dinamik bellek ayırma, bellek ayırma hatasını kontrol etme, struct işaretçilerini fonksiyonlara aktarma, struct üyelerine erişmek ve bunları değiştirmek için ok operatörünü kullanma ve free() ile belleği doğru şekilde temizleme. Fonksiyonlar, işaretçilerin özgün struct verilerinin doğrudan değiştirilmesine nasıl olanak tanıdığını 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;
}Mantık & Akış 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ıKendi başına pratik yap: Online C derleyicisi