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.
Görev
Kolayscanf kullanarak kullanıcıdan dize girdisi okumayı ve bunu tekrar görüntülemeyi gösteren bir C programı yaz. Programın şunları yapmalı:
- Kullanıcının girdisini saklamak için 30 elemanlı,
usernameadlı bir karakter dizisi tanımla - Başka bir girdiyi saklamak için 25 elemanlı,
hobbyadlı bir karakter dizisi tanımla - Kullanıcıya
Enter your username:mesajını göstermek içinprintfkullan - Kullanıcı adını
usernamedizisine okumak için%sbiçim belirteciniscanfile kullan - Kullanıcıya
Enter your hobby:mesajını göstermek içinprintfkullan - Hobiyi
hobbydizisine okumak için%sbiçim belirteciniscanfile kullan - Her iki dizeyi de aşağıda gösterilen biçimin aynısını kullanarak
printfile 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;
}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