CodeBlanks Logo Icon CodeBlanks

Sepeti yazdırma

fmt.Printf ile sepeti biçimlendirip yazdırırsın.

Sepeti yazdırma

Sepeti okunur bir tablo olarak yazdırmak için Printf genişlik ve hassasiyet alanları kullanılır:

for _, u := range s.Urunler {
    fmt.Printf("%-8s %3d x %6.2f = %7.2f\n", u.Ad, u.Adet, u.Fiyat, u.AraToplam())
}
fmt.Printf("%-8s %22.2f\n", "TOPLAM", s.Toplam())

%-8s adı 8 karakterde sola yaslar, %6.2f sayıyı 6 karakterde 2 ondalıkla yazar.

Stringer ile sepet

Sepete String() string yöntemi eklenirse fmt.Println(s) sepeti kendi biçiminde yazar. Metni parça parça kurmak için strings.Builder ve fmt.Fprintf birlikte kullanılır:

func (s Sepet) String() string {
    var b strings.Builder
    for _, u := range s.Urunler {
        fmt.Fprintf(&b, "%s x%d\n", u.Ad, u.Adet)
    }
    return b.String()
}

Uygulama Sepet fişi

Urun (ve AraToplam) ile iki ürünü fmt.Printf("%-8s %2d x %5.2f = %6.2f\n", ...) biçiminde yazdır: Kalem 12.5 × 2 ve Defter 20 × 1.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Urun struct {
    Ad    string
    Fiyat float64
    Adet  int
}

func (u Urun) AraToplam() float64 { return u.Fiyat * float64(u.Adet) }

func main() {
    for _, u := range []Urun{{"Kalem", 12.5, 2}, {"Defter", 20, 1}} {
        fmt.Printf("%-8s %2d x %5.2f = %6.2f\n", u.Ad, u.Adet, u.Fiyat, u.AraToplam())
    }
}

Beklenen çıktı

Kalem     2 x 12.50 =  25.00
Defter    1 x 20.00 =  20.00

Soru ve cevaplar

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

1 <code>fmt.Printf("%6.2f", 7.5)</code> çıktısı nedir?

  • "000007.50"
  • " 7.50" Doğru cevap
  • "7.50"
  • "7.5 "

Açıklama: Genişlik 6, iki ondalık: "7.50" 4 karakter olduğu için başa 2 boşluk eklenir.

2 Sola yasla

Soru
fmt.Printf("____|
", "Kalem")  // "Kalem   |"
Cevap
fmt.Printf("%-8s|
", "Kalem")  // "Kalem   |"

Açıklama: %-8s metni 8 karakterlik alanda sola yaslar.

3 Biçim ve etkisi

Kavram Anlamı
%-8s Sola yaslı metin
%3d 3 haneli sayı
%6.2f 2 ondalıklı, 6 genişlik
String() Println biçimi

Başlangıç bölümündeki tüm dersler