Ödünç verme
- C kursu
- Orta seviye
- Ders 67/116
- 6 dk
Checkout ve Return fonksiyonlarıyla ödünç akışını yazarsın.
Ödünç verme akışı
Bir kitabın ödünç durumu borrowed alanındadır: 0 rafta, 1 ödünçte. checkout fonksiyonu kitabı ödünç verir: b->borrowed = 1;. return_book kitabı iade eder: b->borrowed = 0;.
İki fonksiyon da önce mevcut durumu denetler. checkout zaten ödünçteyse 0 döndürür (başarısız); değilse 1 yapar ve 1 döndürür. return_book raftaysa 0 döndürür; değilse 0 yapar ve 1 döndürür. Bu dönüş değerleri, çağıranın sonucu denetlemesini sağlar. Gerçek bir kütüphanede üye kimliği de kaydedilir; burada basit tutuyoruz.
return_book fonksiyonu
return_book, checkout'un tersidir. Önce if (!b->borrowed) ile rafta mı diye bakar; raftaysa 0 döndürür (zaten geri verilmiş). Değilse b->borrowed = 0; yapar ve 1 döndürür.
Bu simetrik tasarım, durum değişimlerini güvenli yapar. Bir kitap yanlışlıkla iki kez iade edilemez; iki kez ödünç verilemez. main'de checkout(&lib.books[0]); çağrısı yapıp printf("%d\n", lib.books[0].borrowed); ile durumu yazdırabilirsin. Aynı şekilde return_book'u test edersin.
Uygulama checkout ve return_book ekle
Var olan koda int checkout(Book *b) ekle; if (b->borrowed) return 0; b->borrowed = 1; return 1;. int return_book(Book *b) ekle; if (!b->borrowed) return 0; b->borrowed = 0; return 1;. main'de checkout(&lib.books[0]);, printf("%d\n", lib.books[0].borrowed);, return_book(&lib.books[0]);, printf("%d\n", lib.books[0].borrowed); çağır.
Başlangıç kodu
#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;
}
// checkout ve return_book fonksiyonlarını yaz
// main'de checkout yap, durumu yazdır, return_book yap, durumu yazdırÖrnek çözüm
#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 checkout(Book *b) {
if (b->borrowed) return 0;
b->borrowed = 1;
return 1;
}
int return_book(Book *b) {
if (!b->borrowed) return 0;
b->borrowed = 0;
return 1;
}
int main(void) {
Library lib;
library_init(&lib);
Book b1 = {"C Tutorial", 2024, 0};
library_add(&lib, b1);
checkout(&lib.books[0]);
printf("%d\n", lib.books[0].borrowed);
return_book(&lib.books[0]);
printf("%d\n", lib.books[0].borrowed);
return 0;
}Beklenen çıktı
1 0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 checkout gövdesini tamamla
int checkout(Book *b) {
if (b->borrowed) return 0;
b->borrowed = ____;
return 1;
}
int checkout(Book *b) {
if (b->borrowed) return 0;
b->borrowed = 1;
return 1;
}
Açıklama: b->borrowed = 1; kitabı ödünç verir.
2 checkout zaten ödünçte olan kitaba ne döndürür?
- 1 (başarılı)
- 2 (uyarı)
- -1 (hata)
- 0 (başarısız) Doğru cevap
Açıklama: checkout ödünçte kitaba 0 döndürür; işlem başarısızdır.
3 Ödünç durumlarını eşle
| Kavram | Anlamı |
|---|---|
borrowed=0 |
Rafta |
borrowed=1 |
Ödünçte |
checkout döner 1 |
Başarılı ödünç |
return_book döner 0 |
Zaten rafta |