CodeBlanks Logo Icon CodeBlanks

Kütüphane modülü

  • C kursu
  • Orta seviye
  • Ders 66/116
  • 6 dk

Library modülüyle koleksiyon yönetimini kurarsın.

Library struct'ı

Bir kütüphane birden çok kitabı yönetir. Library struct'ı bir Book dizisi ve bir sayaçtan oluşur: typedef struct { Book books[10]; int count; } Library;. count eklenen kitap sayısını tutar.

Bu tasarım sabit kapasitelidir (10 kitap); dinamik bellek daha sonra gelir. library_init fonksiyonu count'u sıfırlar; library_add yeni kitabı dizinin sonuna ekler ve count'u artırır. Bu desen, C'de koleksiyon yönetiminin temelidir; sabit kapasiteli dizi + sayaç.

init ve add fonksiyonları

void library_init(Library *lib) { lib->count = 0; } ile koleksiyonu sıfırlarsın. void library_add(Library *lib, Book b) { lib->books[lib->count++] = b; } ile kitap eklersin. -> işleci işaretçiden alan seçer.

lib->count++ önce mevcut count'u indeks olarak kullanır sonra artırır. Bu sayede bir sonraki ekleme bir sonraki indekse gider. main'de Library lib; library_init(&lib); ile başlar, sonra library_add(&lib, b1); ile kitap eklersin. Bu desen, C'de nesne yönelimli yaklaşımın temelidir: struct + fonksiyonlar struct işaretçisi alır.

Uygulama Library modülünü ekle

Var olan Book ve Member struct'larının ardından Library struct'ını ekle: typedef struct { Book books[10]; int count; } Library;. void library_init(Library *lib) yaz; lib->count = 0;. void library_add(Library *lib, Book b) yaz; lib->books[lib->count++] = b;. main içine Library lib; library_init(&lib);, iki kitap ekle ve print_book(&lib.books[0]); ile print_book(&lib.books[1]); çağır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <string.h>

typedef struct {
    char title[64];
    int year;
    int borrowed;
} Book;

typedef struct {
    char name[64];
    int id;
} Member;

void print_book(Book *b) {
    printf("Book: %s (%d)\n", b->title, b->year);
}

int main(void) {
    Book b = {"C Tutorial", 2024, 0};
    print_book(&b);
    return 0;
}

// Library struct'ını ve library_init, library_add fonksiyonlarını yaz
// main'de Library lib; library_init(&lib); kitaplar ekle ve yazdır

Örnek çözüm

main.c
#include <stdio.h>
#include <string.h>

typedef struct {
    char title[64];
    int year;
    int borrowed;
} Book;

typedef struct {
    char name[64];
    int id;
} Member;

typedef struct {
    Book books[10];
    int count;
} Library;

void library_init(Library *lib) {
    lib->count = 0;
}

void library_add(Library *lib, Book b) {
    lib->books[lib->count++] = b;
}

void print_book(Book *b) {
    printf("Book: %s (%d)\n", b->title, b->year);
}

int main(void) {
    Library lib;
    library_init(&lib);
    Book b1 = {"C Tutorial", 2024, 0};
    Book b2 = {"Pointers", 2023, 0};
    library_add(&lib, b1);
    library_add(&lib, b2);
    print_book(&lib.books[0]);
    print_book(&lib.books[1]);
    return 0;
}

Beklenen çıktı

Book: C Tutorial (2024)
Book: Pointers (2023)

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 library_add ne yapar?

  • Kitabı siler
  • Kitabı diziye ekler ve count'u artırır Doğru cevap
  • Kitabı ödünç verir
  • Kitabı arar

Açıklama: library_add kitabı diziye ekler ve count'u bir artırır.

2 library_add gövdesini tamamla

Soru
void library_add(Library *lib, Book b) {
    lib->books[lib->____++] = b;
}
Cevap
void library_add(Library *lib, Book b) {
    lib->books[lib->count++] = b;
}

Açıklama: lib->books[lib->count++] = b; kitabı ekler ve sayacı artırır.

3 Library işlemlerini eşle

Kavram Anlamı
library_init count'u sıfırlar
library_add Kitap ekler
lib->count Kitap sayısı
books[10] Kapasite

Orta seviye bölümündeki tüm dersler