Kişi Oluşturma Fonksiyonu
Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 51 / 63.
Görev
KolayÖnceki dersten kalan Contact yapınızdan yararlanarak yeni bir kişi için belleği dinamik olarak ayıran bir işlev oluşturun. Programınız şunları yapmalıdır:
- Önceki dersteki üyeleri aşağıdaki gibi olan aynı
Contactyapı tanımını kullanın:- Boyutu 50 olan bir karakter dizisi
name - Boyutu 20 olan bir karakter dizisi
phone - Boyutu 40 olan bir karakter dizisi
email - Bir tamsayı
age
- Boyutu 50 olan bir karakter dizisi
createContactadlı bir işlev yazın:- Parametre almaz
- Bir
Contactyapısına işaretçi döndürür - Bir
malloc()yapısı için belleği dinamik olarak ayırmak üzereContactkullanır - Bellek ayırma işleminin başarılı olup olmadığını kontrol eder:
- Ayırma başarısız olursa (NULL döndürürse),
Memory allocation failedyazdırır ve NULL döndürür - Ayırma başarılı olursa
Contact created successfullyyazdırır
- Ayırma başarısız olursa (NULL döndürürse),
- Ok operatörünü kullanarak tüm yapı üyelerini varsayılan değerlerle başlatır:
namedeğerinicontactPtr->name[0] = '\0';kullanarak boş bir dize olarak ayarlarphonedeğerinicontactPtr->phone[0] = '\0';kullanarak boş bir dize olarak ayarlaremaildeğerinicontactPtr->email[0] = '\0';kullanarak boş bir dize olarak ayarlaragedeğerinicontactPtr->age = 0;kullanarak 0 olarak ayarlar
- Yeni oluşturulan kişiye işaretçiyi döndürür
- main işlevinde:
Contactadlı birnewContactyapısına işaretçi tanımlayıncreateContactişlevini çağırın ve döndürülen işaretçiyinewContactdeğişkenine atayın- Kişi oluşturma işleminin başarılı olup olmadığını kontrol edin:
newContactNULL iseFailed to create contactyazdırın ve programdan çıkın- Başarılıysa
Contact initialized with default valuesyazdırın
- Başlatılan kişi bilgilerini, ok operatörünü kullanarak tam olarak şu biçimde görüntüleyin:
Default Contact Values:Name: [name](boş olacaktır)Phone: [phone](boş olacaktır)Email: [email](boş olacaktır)Age: [age](0 olacaktır)
- Dinamik olarak ayrılan belleği
free(newContact)kullanarak serbest bırakın Memory freed successfullyyazdırın
Bu alıştırma, fabrika işlevleri kavramını tanıtır: dinamik olarak ayrılan yapılara işaretçiler oluşturan ve döndüren işlevler. Dinamik bellek ayırma, uygun hata denetimi, işaretçiler aracılığıyla yapı başlatma ve bellek temizleme konularında pratik yapacaksınız.
Kendin dene
#include <stdio.h>
#include <string.h>
// TODO: Define the Contact struct here
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
int main() {
// TODO: Create a Contact variable named person
struct Contact person;
// Read input values
scanf("%s", person.name);
scanf("%s", person.phone);
scanf("%s", person.email);
scanf("%d", &person.age);
// TODO: Write your validation and output code below
if (person.age < 0 || person.age > 120) {
printf("Invalid age");
return 0;
}
if (strlen(person.phone) < 10) {
printf("Invalid phone number");
return 0;
}
printf("Contact Information:\n");
printf("Name: %s\n", person.name);
printf("Phone: %s\n", person.phone);
printf("Email: %s\n", person.email);
printf("Age: %d\n", person.age);
printf("Name length: %lu\n", strlen(person.name));
if (person.age >= 0 && person.age <= 17) {
printf("Category: Minor");
} else if (person.age >= 18 && person.age <= 64) {
printf("Category: Adult");
} else {
printf("Category: Senior");
}
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ı6Bellek Yönetimi
Stack ve Heap BellekDinamik Bellek Ayırma - malloc()Bellek Ayırma için sizeof() KullanımıBellek Ayırma Hatasını Kontrol Etmefree() ile Belleği Serbest Bırakmacalloc() ile Bellek AyırmaÖzet: Dinamik Dizi9Proje: Basit Kişi Kaydı
Proje: Kişi Struct'ını TanımlamaKişi Oluşturma FonksiyonuKendi başına pratik yap: Online C derleyicisi