Struct'lar ile typedef Kullanımı
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası. Ders 59 / 63.
typedef kullanımının en pratik uygulamalarından biri, struct türleri için takma adlar oluşturmaktır. Bu, o türde bir değişken tanımladığınız her seferde struct anahtar sözcüğünü tekrar tekrar yazma gereğini ortadan kaldırarak kodunuzu daha temiz ve okunabilir hâle getirir.
typedef ile bir struct tanımını birleştirdiğinizde, doğrudan struct'a başvuran yeni bir tür adı oluşturabilirsiniz. Sözdizimi şöyledir:
typedef struct Point {
int x;
int y;
} Point;Artık bir Point değişkenine ihtiyaç duyduğunuz her seferde struct Point p1; yazmak yerine, yalnızca Point p1; yazabilirsiniz. Both bildirim de tamamen aynı şeyi gerçekleştirir, ancak typedef sürümü daha kısa ve okunması daha kolaydır.
Bu yaklaşım, özel veri türleriyle sık sık çalıştığınız daha büyük programlarda özellikle değerlidir. Kodunuzun diğer programlama dillerine daha çok benzemesini sağlar ve programınız boyunca tekrar tekrar struct yazmanın oluşturduğu görsel karmaşayı azaltır.
Görev
KolayBasit bir kitap envanter sistemi oluşturmak için typedef ile struct'ları kullanmayı gösteren bir C programı oluşturun. Programınız şunları yapmalıdır:
- Aşağıdaki üyelere sahip
Bookadlı birstructtanımlayın:- Bir tamsayı
id - 50 boyutunda bir karakter dizisi
title - Bir float
price - Bir tamsayı
quantity
- Bir tamsayı
struct BookiçinBookadlı bir tür takma adı oluşturmak üzeretypedefkullanın- main işlevinde:
book1vebook2adlı,Booktüründe iki değişken tanımlayın- İlk book için girdiyi şu sırayla okuyun: ID, title, price, quantity
- Bu değerleri
book1üyelerine atayın - İkinci book için girdiyi şu sırayla okuyun: ID, title, price, quantity
- Bu değerleri
book2üyelerine atayın - Her iki book için bilgileri tam olarak şu biçimde yazdırın:
Book 1: ID=[id], Title=[title], Price=[price], Quantity=[quantity]Book 2: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
- Her book'un envanterinin toplam değerini (price × quantity) tam olarak şu biçimde hesaplayıp yazdırın:
Book 1 Total Value: [total_value]Book 2 Total Value: [total_value]
- Her iki book'un combined envanter değerini tam olarak şu biçimde hesaplayıp yazdırın:
Combined Inventory Value: [combined_value] - Hangi book'un toplam değerinin daha yüksek olduğunu belirleyip yazdırın:
- book1'in toplam değeri daha yüksekse:
Book 1 has higher valueyazdırın - book2'nin toplam değeri daha yüksekse:
Book 2 has higher valueyazdırın - Her ikisinin değeri equal ise:
Both books have equal valueyazdırın
- book1'in toplam değeri daha yüksekse:
Bu challenge, struct'larla typedef kullanmanın programınız boyunca tekrar tekrar struct Book yazma gerekliliğini nasıl ortadan kaldırdığını gösterir. Değişkenleri struct Book book1; olarak tanımlamak yerine, basitçe Book book1; yazabilirsiniz; bu da kodunuzu daha temiz ve okunabilir hâle getirir. Struct tanımını typedef ile birleştirme, struct üyeleriyle çalışma ve struct verilerini kullanarak calculations gerçekleştirme pratiği yapacaksınız.
Kendin dene
#include <stdio.h>
#include <string.h>
// TODO: struct ve typedef'inizi burada tanımlayın
int main() {
// TODO: Book değişkenlerinizi burada bildirin
// İlk kitap için girişi oku
int id1, quantity1;
char title1[50];
float price1;
scanf("%d", &id1);
scanf("%s", title1);
scanf("%f", &price1);
scanf("%d", &quantity1);
// TODO: book1 üyelerine değerleri atayın
// İkinci kitap için girişi oku
int id2, quantity2;
char title2[50];
float price2;
scanf("%d", &id2);
scanf("%s", title2);
scanf("%f", &price2);
scanf("%d", &quantity2);
// TODO: book2 üyelerine değerleri atayın
// TODO: Kitap bilgilerini yazdırın, değerleri hesaplayın ve karşılaştırın
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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 Sayma7Yapılar (structs)
Struct Nedir?Struct TanımlamaStruct Değişkenleri OluşturmaStruct Üyelerine ErişmeStruct BaşlatmaÖzet: Öğrenci Verisi Struct'ı10Enum'lar ve Typedef
İsimlendirilmiş Sabitler için enumEnum Tanımlama ve KullanmaSwitch İfadelerinde Enum KullanımıTür Takma Adları için typedef KullanımıStruct'lar ile typedef KullanımıÖzet: Typedef ve Enum Pratiği2İş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ıKendi başına pratik yap: Online C derleyicisi