Menu
CoddyTech

scanf ile String Girişi

Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 14 / 63.

Artık dizgelerin null sonlandırıcıyla nasıl çalıştığını anladığına göre, kullanıcılardan dizge girdisi almayı öğrenmenin zamanı geldi. scanf işlevi, %s biçim belirtecini kullanarak dizgeleri okuyabilir; ancak anlaman gereken önemli sınırlamaları vardır.

scanf ile bir dize okumak için %s biçimini kullanır ve karakter dizinizin adını (& işleci olmadan; çünkü dizi adları zaten adres belirtir) geçirirsiniz:

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

Ancak, scanf("%s", ...) önemli bir sınırlamaya sahiptir: herhangi bir boşluk karakteriyle (boşluk, sekme veya yeni satır) karşılaşır karşılaşmaz okumayı durdurur. Bu, kullanıcı "Hello World" yazarsa scanf işlevinin yalnızca "Hello" kısmını alacağı ve "World" sözcüğünü giriş arabelleğinde bırakacağı anlamına gelir.

Bir diğer ciddi sorun, scanf işlevinin girdinin dizinize sığıp sığmadığını kontrol etmemesidir. Birisi dizinizin alabileceğinden daha uzun bir sözcük girerse arabellek taşmasına yol açabilir; bu da programınızın çökmesine veya güvenlik açıkları oluşmasına neden olabilir. Karakter dizinizin beklenen girdi için yeterince büyük olduğundan daima emin olun.

Bu sınırlamalara rağmen, scanf("%s", ...) tek sözcükleri okumak için gayet uygundur; sıradaki görevde tam olarak bunu uygulayacaksın.

challenge icon

Görev

Kolay

scanf kullanarak kullanıcıdan dize girdisi okumayı ve bunu tekrar görüntülemeyi gösteren bir C programı yaz. Programın şunları yapmalı:

  1. Kullanıcının girdisini saklamak için 30 elemanlı, username adlı bir karakter dizisi tanımla
  2. Başka bir girdiyi saklamak için 25 elemanlı, hobby adlı bir karakter dizisi tanımla
  3. Kullanıcıya Enter your username: mesajını göstermek için printf kullan
  4. Kullanıcı adını username dizisine okumak için %s biçim belirtecini scanf ile kullan
  5. Kullanıcıya Enter your hobby: mesajını göstermek için printf kullan
  6. Hobiyi hobby dizisine okumak için %s biçim belirtecini scanf ile kullan
  7. Her iki dizeyi de aşağıda gösterilen biçimin aynısını kullanarak printf ile yazdır

Girdi, ayrı ayrı tek sözcüklerden oluşan iki değer olarak verilecektir (her sözcüğün içinde boşluk olmayacaktır).

Çıktın sonuçları aşağıdaki biçimde göstermeli:

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

Örneğin, kullanıcı kullanıcı adı olarak Alice ve hobi olarak reading girerse çıktı şu şekilde olmalı:

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

Bu alıştırma, dize girdisini okumak için %s biçim belirteciyle scanf kullanma, yeterli boyutta karakter dizilerini doğru şekilde tanımlama ve kullanıcı girdisini printf ile biçimlendirilmiş çıktıda birleştirme konusundaki anlayışını sınar.

Kendin dene

#include <stdio.h>

int main() {
    // TODO: Karakter dizilerinizi burada tanımlayın
    
    // TODO: Kullanıcıdan girdi istemek ve girdiyi okumak için kodunuzu buraya yazın
    
    // TODO: Son çıktı mesajını yazdırın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi