Kişi Bilgilerini Doldurma Fonksiyonu
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 52 / 63.
Görev
KolayÖnceki dersteki kişi oluşturma fonksiyonunuzun üzerine inşa ederek, bir kişiyi kullanıcı girişiyle dolduran bir fonksiyon oluşturun. Programınız şunları yapmalıdır:
- Önceki derslerdeki şu üyelere sahip aynı
Contactstruct 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
- 50 boyutunda bir karakter dizisi
- Önceki dersteki şu işlemleri yapan aynı
createContactfonksiyonunu kullanın:- Bir
Contactstruct'ı için dinamik olarak bellek ayırır - Tüm üyeleri varsayılan değerlere başlatır
- Kişiye bir işaretçi (pointer) döndürür
- Bir
- Şu işlemleri yapan
populateContactadında bir fonksiyon yazın:- Parametre olarak bir
Contactstruct işaretçisi alır - Hiçbir şey döndürmez (void)
- Kullanıcıdan girdi ister ve aşağıdaki verileri tam olarak bu sırayla okur:
Enter name:yazdırır vescanf("%s", contactPtr->name)kullanarak ad alanına bir dize okurEnter phone:yazdırır vescanf("%s", contactPtr->phone)kullanarak telefon alanına bir dize okurEnter email:yazdırır vescanf("%s", contactPtr->email)kullanarak e-posta alanına bir dize okurEnter age:yazdırır vescanf("%d", &contactPtr->age)kullanarak yaş alanına bir tam sayı okur
- Tüm girdileri okuduktan sonra verileri doğrular:
- Eğer yaş 0'dan küçük veya 120'den büyükse,
Invalid age enteredyazdırır - Eğer telefon numarası uzunluğu 10 karakterden azsa (
strlen()kullanın),Invalid phone numberyazdırır - Tüm doğrulamalar geçerse,
Contact populated successfullyyazdırır
- Eğer yaş 0'dan küçük veya 120'den büyükse,
- Parametre olarak bir
- Ana fonksiyonda (main function):
createContactfonksiyonunu kullanarak bir kişi oluşturun- Kişi oluşturmanın başarılı olup olmadığını kontrol edin
- Kişi verilerini doldurmak için
populateContactfonksiyonunu çağırın - Doldurduktan sonra, ok operatörünü kullanarak kişi bilgilerini tam olarak şu formatta görüntüleyin:
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- Dinamik olarak ayrılmış belleği serbest bırakın
Contact deleted successfullyyazdırın
Bu meydan okuma, işaretçiler aracılığıyla struct verilerini değiştiren fonksiyonların nasıl oluşturulacağını gösterir. populateContact fonksiyonu kişiye bir işaretçi alır ve orijinal struct üyelerini doğrudan değiştirmek için ok operatörünü kullanır. Kullanıcı girişi işleme, veri doğrulama ve fonksiyon parametreleri aracılığıyla dinamik olarak ayrılmış struct'larla çalışma pratiği yapacaksınız.
Kendin dene
#include <stdio.h>
#include <stdlib.h>
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
struct Contact* createContact() {
struct Contact* contactPtr = (struct Contact*)malloc(sizeof(struct Contact));
if (contactPtr == NULL) {
printf("Memory allocation failed\n");
return NULL;
}
printf("Contact created successfully\n");
contactPtr->name[0] = '\0';
contactPtr->phone[0] = '\0';
contactPtr->email[0] = '\0';
contactPtr->age = 0;
return contactPtr;
}
int main() {
struct Contact* newContact;
newContact = createContact();
if (newContact == NULL) {
printf("Failed to create contact\n");
return 1;
}
printf("Contact initialized with default values\n");
printf("Default Contact Values:\n");
printf("Name: %s\n", newContact->name);
printf("Phone: %s\n", newContact->phone);
printf("Email: %s\n", newContact->email);
printf("Age: %d\n", newContact->age);
free(newContact);
printf("Memory freed successfully\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ı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 Fonksiyonu