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.
Görev
KolayKullanı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:
- Kullanıcının girdisini saklamak için 30 öğeli
usernameadlı bir karakter dizisi tanımlayın - Başka bir girdiyi saklamak için 25 öğeli
hobbyadlı bir karakter dizisi tanımlayın - Kullanıcıya "Enter your username:" mesajını göstermek için
printfkullanın - Kullanıcı adını
scanfdizisine okumak için%sbiçim belirteciyleusernamekullanın - Kullanıcıya "Enter your hobby:" mesajını göstermek için
printfkullanın - Hobiyi
scanfdizisine okumak için%sbiçim belirteciylehobbykullanın - Aşağıda gösterilen tam biçimde her iki dizeyi de
printfkullanarak 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;
}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
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String FonksiyonlarıKendi başına pratik yap: Online C derleyicisi