Menu
Coddy logo textTech

Kişi Oluşturma Fonksiyonu

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 51 / 63.

challenge icon

Görev

Kolay

Önceki dersteki Contact yapınızın (struct) üzerine inşa ederek, yeni bir kişi için dinamik olarak bellek ayıran bir fonksiyon oluşturun. Programınız şunları yapmalıdır:

  1. Önceki dersteki şu üyelere sahip aynı Contact yapısı tanımını kullanın:
    • 50 boyutunda bir karakter dizisi name
    • 20 boyutunda bir karakter dizisi phone
    • 40 boyutunda bir karakter dizisi email
    • Bir tam sayı age
  2. Aşağıdaki özelliklere sahip createContact adında bir fonksiyon yazın:
    • Parametre almaz
    • Bir Contact yapısına işaret eden bir pointer döndürür
    • Bir Contact yapısı için dinamik olarak bellek ayırmak üzere malloc() kullanır
    • Bellek ayırma işleminin başarılı olup olmadığını kontrol eder:
      • Tahsis başarısız olursa (NULL dönerse), Memory allocation failed yazdırır ve NULL döndürür
      • Tahsis başarılı olursa, Contact created successfully yazdırır
    • Ok operatörünü (arrow operator) kullanarak tüm yapı üyelerini varsayılan değerlere başlatır:
      • contactPtr->name[0] = '\0'; kullanarak name üyesini boş bir dizeye ayarlar
      • contactPtr->phone[0] = '\0'; kullanarak phone üyesini boş bir dizeye ayarlar
      • contactPtr->email[0] = '\0'; kullanarak email üyesini boş bir dizeye ayarlar
      • contactPtr->age = 0; kullanarak age üyesini 0'a ayarlar
    • Yeni oluşturulan kişinin pointer'ını döndürür
  3. Main fonksiyonu içinde:
    • newContact adında bir Contact yapısı pointer'ı tanımlayın
    • createContact fonksiyonunu çağırın ve dönen pointer'ı newContact değişkenine atayın
    • Kişi oluşturma işleminin başarılı olup olmadığını kontrol edin:
      • Eğer newContact NULL ise, Failed to create contact yazdırın ve programdan çıkın
      • Başarılıysa, Contact initialized with default values yazdırın
    • Başlatılan kişi bilgilerini ok operatörünü kullanarak tam olarak şu formatta görüntüleyin:
      • Default Contact Values:
      • Name: [name] (boş olacak)
      • Phone: [phone] (boş olacak)
      • Email: [email] (boş olacak)
      • Age: [age] (0 olacak)
    • free(newContact) kullanarak dinamik olarak ayrılan belleği serbest bırakın
    • Memory freed successfully yazdırın

Bu meydan okuma, fabrika fonksiyonları (factory functions) kavramını tanıtır - dinamik olarak ayrılmış yapılara pointer oluşturan ve döndüren fonksiyonlar. Dinamik bellek ayırma, uygun hata kontrolü, pointer'lar 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;
}

Logic & Flow bölümündeki tüm dersler