Kişi Bilgilerini Doldurma Fonksiyonu
Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 52 / 63.
Görev
KolayÖnceki dersteki kişi oluşturma işlevini temel alarak, kullanıcı girdisiyle bir kişiyi dolduran bir işlev oluştur. Programın şunları yapmalı:
- Önceki derslerdeki aynı
Contactyapı tanımını şu üyelerle kullan:- 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
- Önceki dersteki aynı
createContactişlevini kullan, ancak artıkContact created successfullyyazdırmaması içinprintfsatırlarını kaldır. İşlev yine de:- Bir
Contactyapısı için dinamik olarak bellek ayırır - Tüm üyeleri varsayılan değerlerle başlatır
- Kişiye bir işaretçi döndürür
- Bir
- Şunları yapan,
populateContactadlı bir işlev yaz:- Parametre olarak bir
Contactyapısına işaretçi 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 name alanına bir metin okurEnter phone:yazdırır vescanf("%s", contactPtr->phone)kullanarak phone alanına bir metin okurEnter email:yazdırır vescanf("%s", contactPtr->email)kullanarak email alanına bir metin okurEnter age:yazdırır vescanf("%d", &contactPtr->age)kullanarak age alanına bir tamsayı okur
- Tüm girdileri okuduktan sonra verileri doğrular:
- age 0'dan küçük veya 120'den büyükse
Invalid age enteredyazdırır - Telefon numarasının uzunluğu 10 karakterden kısaysa (
strlen()kullan),Invalid phone numberyazdırır - Tüm doğrulamalar başarılı olursa
Contact populated successfullyyazdırır
- age 0'dan küçük veya 120'den büyükse
- Parametre olarak bir
- main işlevinde:
createContactişlevini kullanarak bir kişi oluştur- Kişi oluşturma işleminin başarılı olup olmadığını kontrol et
- Kişi verilerini doldurmak için
populateContactişlevini çağır - Verileri doldurduktan sonra kişi bilgilerini ok operatörünü kullanarak tam olarak şu biçimde görüntüle:
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- Dinamik olarak ayrılan belleği serbest bırak
Contact deleted successfullyyazdır
Bu alıştırma, işaretçiler aracılığıyla yapı verilerini değiştiren işlevlerin nasıl oluşturulacağını gösterir. populateContact işlevi kişiye bir işaretçi alır ve özgün yapının üyelerini doğrudan değiştirmek için ok operatörünü kullanır. Kullanıcı girdisi işlemeyi, veri doğrulamayı ve işlev parametreleri aracılığıyla dinamik olarak ayrılan yapılarla çalışmayı deneyimleyeceksin.
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;
}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