Menu
Coddy logo textTech

scanf ile String Girişi

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

Dizelerin null sonlandırıcı ile nasıl çalıştığını anladığınıza göre, kullanıcılardan dize girişi almayı öğrenmenin zamanı geldi. scanf fonksiyonu, %s format belirleyicisini kullanarak dizeleri okuyabilir, ancak anlamanız gereken önemli sınırlamalarla birlikte gelir.

scanf ile bir dize okumak için %s formatını kullanırsınız ve karakter dizinizin adını (dizi adları zaten adres olduğu için & operatörü olmadan) geçirirsiniz:

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

Ancak, scanf("%s", ...) kritik bir kısıtlamaya sahiptir: herhangi bir boşluk karakteriyle (boşluk, sekme veya yeni satır) karşılaştığı anda okumayı durdurur. Bu, bir kullanıcı "Hello World" yazarsa, scanf fonksiyonunun sadece "Hello" kısmını yakalayacağı ve "World" kısmını giriş tamponunda bırakacağı anlamına gelir.

Bir başka ciddi sorun da, scanf fonksiyonunun girdinin dizinize sığıp sığmadığını kontrol etmemesidir. Eğer birisi dizinizin kapasitesinden daha uzun bir kelime girerse, bu durum bir bellek taşmasına (buffer overflow) yol açarak potansiyel olarak programınızın çökmesine veya güvenlik açıklarının oluşmasına neden olabilir. Karakter dizinizin beklenen girdi için yeterince büyük olduğundan her zaman emin olun.

Bu sınırlamalara rağmen, scanf("%s", ...) tek kelimeleri okumak için tamamen uygundur; bu da tam olarak yaklaşan meydan okumada pratik yapacağınız şeydir.

challenge icon

Görev

Kolay

Kullanıcıdan scanf kullanarak dize girdisi okuyan ve bunu tekrar görüntüleyen bir C programı yazın. Programınız şunları yapmalıdır:

  1. Kullanıcının girdisini saklamak için 30 öğeli username adlı bir karakter dizisi tanımlayın
  2. Başka bir girdiyi saklamak için 25 öğeli hobby adlı bir karakter dizisi tanımlayın
  3. Kullanıcıya "Enter your username:" mesajını göstermek için printf kullanın
  4. Kullanıcı adını scanf dizisine okumak için %s biçim belirteciyle username kullanın
  5. Kullanıcıya "Enter your hobby:" mesajını göstermek için printf kullanın
  6. Hobiyi scanf dizisine okumak için %s biçim belirteciyle hobby kullanın
  7. Aşağıda gösterilen tam biçimde her iki dizeyi de printf kullanarak yazdırın

Girdi, iki ayrı tek sözcük olarak sağlanacaktır (her sözcüğün içinde boşluk bulunmayacaktır).

Çıktınız sonuçları aşağıdaki biçimde görüntülemelidir:

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ıdır:

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

Bu görev, dize girdisini okumak için scanf biçim belirteciyle %s kullanma, yeterli boyuta sahip karakter dizisini doğru şekilde tanımlama ve kullanıcı girdisini printf kullanarak biçimlendirilmiş çıktıyla birleştirme konusundaki anlayışınızı sınar.

Kendin dene

#include <stdio.h>

int main() {
    // YAPILACAK: Karakter dizilerinizi burada tanımlayın
    
    // YAPILACAK: Giriş istemek ve okumak için kodunuzu buraya yazın
    
    // YAPILACAK: Nihai çı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