Menu
Coddy logo textTech

Kişi Oluşturma Fonksiyonu

Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 51 / 63.

challenge icon

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:

  1. Önceki dersteki üyeleri aşağıdaki gibi olan aynı Contact yapı 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
  2. createContact adlı bir işlev yazın:
    • Parametre almaz
    • Bir Contact yapısına işaretçi döndürür
    • Bir malloc() yapısı için belleği dinamik olarak ayırmak üzere Contact kullanı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 failed yazdırır ve NULL döndürür
      • Ayırma başarılı olursa Contact created successfully yazdırır
    • Ok operatörünü kullanarak tüm yapı üyelerini varsayılan değerlerle başlatır:
      • name değerini contactPtr->name[0] = '\0'; kullanarak boş bir dize olarak ayarlar
      • phone değerini contactPtr->phone[0] = '\0'; kullanarak boş bir dize olarak ayarlar
      • email değerini contactPtr->email[0] = '\0'; kullanarak boş bir dize olarak ayarlar
      • age değerini contactPtr->age = 0; kullanarak 0 olarak ayarlar
    • Yeni oluşturulan kişiye işaretçiyi döndürür
  3. main işlevinde:
    • Contact adlı bir newContact yapısına işaretçi tanımlayın
    • createContact işlevini çağırın ve döndürülen işaretçiyi newContact değişkenine atayın
    • Kişi oluşturma işleminin başarılı olup olmadığını kontrol edin:
      • 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 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 successfully yazdı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

Kendi başına pratik yap: Online C derleyicisi