Merhaba, hoş geldiniz.
Bu konferansta şu konulardan bahsetmek istiyorum klavyeden girdi okuma.
Bu benim için temel bir kavramdır. erken öğrenmenizi
istedim çünkü bu çok değerli ve pek çok program girdi alır.
Bu yüzden bunu erken temin ettim.
Bazı kavramlar şu şekilde değildir tamamen açık olacak.
Ama bunları kesinlikle öğreneceğiz. diğer bölümlerdeki kavramları
da ele alacağız, ancak Bunu çok erken öğrenirsiniz ve printf fonksiyonuna
çok benzer.
Çıktı konusunu tartıştık.
Nasıl biçimlendireceğimizi biliyoruz printf kullanarak çıktı.
Şimdi biraz öğrenmek zorundayız biraz da girdiyle ilgili, kullanıcıdan
girdi almakla ilgili.
Kullanıcıya sormak çok yararlıdır bir programa veri girmek için.
Komut satırı hakkında konuştuk Bu yolla veri giren argümanlar,
bunu yapmanın bir yoludur.
Başka bir yol da kullanıcıya sormaktır doğrudan klavyede bir şeyler
yazabilmeleri için.
Yani girdiyi şuradan alırsınız klavyede görüntülenir, ancak girişi girdiğinizde
görüntülenir konsol terminali aracılığıyla.
Girişi bu şekilde girersiniz.
c kütüphanesi şunları içerir çeşitli giriş fonksiyonları.
Scanf kullanacağız.
Bu en genel işlevdir.
Çok faydalı.
Bu farklı sağlar girebileceğiniz formatlar.
Böylece metin girebilirsiniz ve sonra farklı formatlara dönüştürülür.
Bu yüzden scanf girdiyi standart giriş akışı, yani stdin.
Scanf aslında şunlar için kullanılabilir Giriş akışı bir dosya ise dosyalardan
da okuma.
Ama biz endişelenmeyeceğiz. Şimdilik bunların
hiçbiri hakkında konuşmayacağız. klavyeden girdi okumak.
Tamam, ve böylece stdin tarafından varsayılan klavye.
Stdin bir akımdır.
Akarsular ve c, üçler farklı akışlar.
Hata akışı, standart ve standart çıktı.
Varsayılan olarak standart klavyedir.
O yüzden bu şekilde devam edeceğiz.
Ve scanf kullanarak standart olarak okunur ve daha sonra ne girdiğinize
veya nasıl girdiğinize bağlı olarak verileri
depolamak istiyorsanız, şunu söylemeliyim ki çünkü girdiğiniz
şey metin olacaktır.
Bu metni şu metne dönüştürecek bu şekilde sağladığınız format.
Biçim belirticilerini kullanacak tıpkı printf işlevi gibi.
Yani format şu şekilde bir dizi olabilir karakterlerden oluşur ve buna dize adı verilir.
Bu konuda çalışmadık. henüz çok fazla detay yok.
Ama yine de, ne zaman veri türleri hakkında konuşuyoruz.
Ve sonra da şunları belirtebilirsiniz gibi hakkında konuşacağımız
diğer veri türleri tamsayılar, sayılar temel olarak.
Yani sayıları okuyabilirsin.
Dizeleri okuyabilirsiniz.
Aşağıdakileri içeren sayıları okuyabilirsiniz ondalık sayılar, tek tek
karakterler, tüm bu güzel şeyler.
Eğer standart giriş klavye varsayılan olarak metin yazdıkça ne
olacağını belirler klavye aracılığıyla, bu metni alacak,
c programına koyacak ve bu metni dönüştürecektir.
Ve metin şu gibi şeylerdir harfler, rakamlar ve noktalama işaretleri.
Yani yazıyor olsanız bile bir sayı, klavyeden geldiği için
hala metindir.
Yani 2014 tamsayısını girerseniz, Bu bir sayıdır ve esasen olan şey karakterler
iki sıfır bir ve dört.
Ve ne oldu ve ne gerçekleşecek olan şey, bu girdiyi c programına
göndermek olacaktır.
Ve eğer bu verileri saklamak istiyorsanız bir sayı olarak, o zaman bu verileri dönüştürmeniz
gerekecektir.
Ve böylece formatı belirtmeniz gerekir belirtecini nasıl dönüştürmek istediğinizi belirtir,
tıpkı printf'te yaptığınız gibi.
printf ile kullandığınız gibi hatırlayın bir tamsayı yazdırmak için yüzde d.
Metni şu şekle dönüştürürsünüz Eğer isterseniz scanf için yüzde d kullanarak
bir tamsayı dizeyi bir sayıya dönüştürür.
Ve biz de bunu yapacağız. temeller için erken yapmak.
Sadece sayıları kullanacağız çünkü şu ana kadar
sayıları biliyoruz ve gerçekten Henüz teller hakkında bir şey öğrenmedim.
Yani biz esas olarak giriş yaparken sayıları kullanırız.
Yani Scanf.
printf'e çok benzer.
Ama bunun yerine, biraz farklı bazı argümanlarda yer alır.
Hala bir kontrol dizesi kullanır ardından bir argüman listesi gelir.
Yani bir şey olacak o çift tırnakların içinde.
Çift tırnaklar tipik olarak sadece tek bir şey içerir ve bu da format belirteci
olacaktır.
Verileri nasıl dönüştüreceğiniz.
Yani kontrol dizesi şunları gösterir karakterlerin giriş akışı için
hedef veri türleri.
Bu format belirteci, yüzde d, yüzde c, yüzde s, akış
için yüzde f ve benzeri.
printf işlevi değişken kullanır argümanlarındaki isimler, sabitler ve ifadeleri
öğreniyoruz çünkü bunu öğreniyoruz.
Çift tırnak içinde bir şey var.
Ve sonra çiftin içinde tırnak işaretleri, biçim belirleyicileri kullanırsınız.
Ve virgüllerden sonra, sen değişkenleri yazdırabilir veya ifadeleri
bile yazdırabilirsiniz.
İfadeler, hakkında konuşacağız daha ayrıntılı olarak, esasen
bir değer döndüren bir şey.
En yaygın ifade türü aritmetik bir ifadedir.
scanf işlevi farklıdır çünkü aslında değişkenleri
görüntülemek yerine işaret edilen değişkenleri kullanın.
Ama neyse ki işaretçiler C'de büyük bir kavramdır.
Hiçbir şey bilmek zorunda değilsin. scanf fonksiyonunu anlamak ve kullanmak
için işaretçiler hakkında.
Bu konuda endişelenme.
Pekala, tek yapman gereken scanf işlevini kullanabilmek için bu işlevle
ilgili üç kuralı hatırlamanız gerekir.
Geri dönecek olan sayı başarıyla okuduğu öğeler.
Yani bir değişken okursa, iki değişken, üç değişken, bunu döndürecektir.
Bir değeri okumak için scanf kullanırsanız Tartışacağımız
temel değişken türlerinden biri için, örneğin int, float, double gibi, o zaman yapmanız gereken
tek şey değişken adında, bağımsız değişkenin önünde bir ve işareti
bulunmalıdır.
Nedenini bilmene bile gerek yok. Şu anda öyle ama sadece
temel veri türlerinden herhangi birini yapın.
Ampersand bir adres.
Ve scanf bir işaretçi aldığı için referansı kaldırmanız, adresi aktarmanız
gerekir.
Üçüncü şey ise scanf için hatırlamak zorundayım.
Bir dosyayı okumak için scanf kullanırsanız bir karakter dizisi olan dizeyi bir karaktere
dönüştürdüğünüzde ve işareti kullanmak zorunda değilsiniz.
Yani temel olarak scanf iki Size bir örnek göstereceğim
argümanlar.
İlk argüman şu olacak yazdığınız verileri dönüştürmek için.
Ve eğer bu verileri depolarsanız int içinde, yüzde biçim belirticisini
yüzde d olarak kullanırsınız.
Eğer dizede saklamak istiyorsanız henüz öğrenmediğimiz,
yüzde s kullanıyorsunuz.
Ve sonra ikinci argüman ve kaç tane format belirteci kullandığınıza
bağlı olarak birçok argüman olabilir çünkü tıpkı printf gibi gerçek
değişken, değişken adı olacaktır.
Ve eğer değişken her şey ise ama bir dize, sadece ampersand kullanırsınız.
Aksi takdirde, sen ve işareti kullanın.
Scanf işlevi ayrıca boşlukları da kullanır girdiyi ayrı alanlara nasıl böleceğinize
karar vermek için.
Ve beyaz boşluk şunları içerir yeni satırlar, sekmeler ve boşluklar.
Ve yine bir örnek üzerinden gideceğim Bunun ne anlama geldiğini size
göstermek için printf'in çok sayıda görüntüleyebildiği gibi, içinde kaç tane
biçim belirticiniz olduğuna bağlı olarak birçok değişken tek tırnak, scanf ile aynı şey.
Eğer scanf'te birden fazla şey varsa çift tırnak içinde, birden
fazla girdi okuyacaktır.
Ve girdiler gidiyor yeni hatlarla bölünecek.
Tekrar söylüyorum, eğer denemek istiyorsanız scanf'in ne olduğunu
anlamak için, printf'in tersidir.
Printf tamsayıları dönüştürecektir, kayan noktalı sayılar, karakter dizeleri,
tüm bu farklı veriler türüne dönüştürür ve çıktısını
görebilmeniz için metne dönüştürür.
Ve bu olacak ekranda görüntülenir.
Scanf ise tam tersi.
Girdi olarak alacak metin ve farklı veri türlerinden herhangi birine dönüştürme
ints, floats ve doubles gibi.
Şimdi bir örneğe bakalım.
Bu bir örnektir basit bir programımız var.
Ana rutinin ne olduğunu biliyoruz.
Dahil etme yönergesinin ne olduğunu biliyoruz.
Henüz öğrenemedik. karakterler ve tamsayılar henüz.
Ama temelde bunun en tepesinde main fonksiyonunda
iki değişken yaratıyoruz çünkü ve değişkenler hakkında çok
daha ayrıntılı konuşacağız.
Ancak tıpkı printf işlevi gibi, yine tam tersini yapıyorsun.
Yani burada çıktıyı şu adrese gösteriyoruz bir değer girmenizi söyleyen ekran.
Scanf çiftin içinde tırnak işaretleri, girdiyi okumak için biçim belirticilerine
sahiptir.
Ve bu yüzden belirtmek zorundasınız okunacak veriler,
burada yüzde s, yüzde d yazıyor.
Bu da demek oluyor ki string, o zaman bir int okuyoruz.
Ve fark edeceksiniz ki ilk virgülden sonra ve işareti
ve scanf yok.
Ve ikinci virgülden sonra, bir çünkü bu bir tamsayıdır.
Bir sayı okuyoruz.
Ve sonra printf çıktı görüntüleniyor.
Yani diyor ki bunu girmişsin dizgesini bu tamsayıya dönüştürür, tıpkı printf'in
ne yaptığını bildiğimiz gibi ve sonra ana işlev sıfır döndürür.
Pekala, şimdi şunun üzerinden geçelim kod bloklarında bir saniye içinde örnek.
Ama tekrar edelim birkaç kavram.
Bir program scanf kullandığında Klavyeden girdi toplar, bazı
metinler girmenizi bekler.
Yani program aslında siz verileri girene kadar duraklatmak için.
Ve sonra bir metin girdiğinizde.
Ve biraz boşluk girerseniz, eğer birden fazla şey giriyorsanız,
program devam eder ve siz enter tuşuna bastıktan sonra
girdiyi okur.
Enter tuşuna basmanız gerekiyor.
Yine, scanf girdiyi şu şekilde bekler sizin sağladığınız formatın aynısı.
Yani eğer yüzde s ve yüzde e, bu da bir dize ve ardından bir boşluk
sağlamanız gerektiği anlamına gelir, herhangi bir sayıda boşluk
ve ardından bir tamsayı, bir sayı ve bir sözcük.
String bir kelimedir integer bir sayıdır.
Öyleyse şu örnek üzerinden gidelim kod bloklarında satır satır.
Tamam, işte elimizde ana işlevimiz.
Ve yine, önemli olan Bir programa veri girebilme.
Yani tıpkı printf gibi ve tüm bu kodları anlamak
zorunda değiliz.
Ve biz bile kurtulduk geçirilen parametreler,
basit ana fonksiyon.
Bunu yapmak zorunda değiliz. tüm bu kodu anlamak.
Anlamak zorunda bile değiliz Bu noktada değişkenlerin ne olduğunu.
Ancak değişkenler veri depolayacaktır.
Örnekte, şunları oluşturuyoruz 100'lük bir dize dizisi ve noktalı virgül ile ve sonra aynı zamanda
printf'te olduğu gibi bir tamsayı
oluşturacaktır.
Elimizde bir tamsayı var, ama bir dize kullanıyoruz.
Sadece göstermek istiyorum farklı girdiler.
O zaman genellikle senden önce klavyeden girdi almak için scanf işlevini çağırırsanız,
her zaman kullanıcıya bir şey söyleyecek.
Onlara ne gireceklerini söylemek istiyorsunuz.
Yani printf, hatırla, ekrana veri görüntüler.
Sadece bir değer girin diyeceğiz.
Ve onlar aslında bir çift girip noktalı virgülle bitiriyoruz.
Anlatmak zorundayız kullanıcının bir şey girmesi için.
Şimdi burada scanf işlevini kullanın.
scanf diyoruz ve sonra içinde parantezler, çift tırnak içindeki
ilk argüman okuyacağımız veriler olacak.
Yani bu örnekte, sadece Diyelim ki sadece bir int
olan d girdi yüzdesini okuyacağız.
Ve sonra da Bu veriyi bir değişkende saklayın çünkü
ona bakmak istiyoruz.
Ve bu ben olacağım.
Şimdi ve işaretini belirtmeliyiz çünkü hatırlayın, işaretçilerle ilgili
şu küçük numarayı.
Bilmek zorunda değilsin neden, sadece adres.
Böylece 17. satırdaki scanf aslında kullanıcı enter tuşuna basana kadar
klavyeden veri okur.
Ve sonra bu veriler I adlı bir değişkende saklanmalıdır.
Yani şimdi sadece Girdiklerimizi yazdırın.
Yani burada sadece şunu söyleyeceğiz, okunabilir olması için bir satır beslemesi
ekleyeceğiz, bu yüzden kaçış dizimizi kullanın,
ters bölü n ve siz diyeceğiz.
Yüzde d'ye girdin ve biz de gidiyoruz değişkenin değerini görüntülemek için.
Ve ayrıca sonra bir satır beslemesi koyun.
Yani değişkenin değeri görüntülemek istediğimiz i'dir.
Bu işi bitireceğiz. noktalı virgül ile.
Bu da bizim programımız.
Bu yüzden tekrar çıktı yazdırarak bir değer, bir girdi satırı 17 okuyarak belirttiğimiz
verilerin okuma bir tamsayıdır, bunu bir ve işareti kullanarak
depolarım ve sonra az önce girdiklerimizi yazdırın.
Hadi bunu inşa edelim ve çalıştıralım.
Ve programın başladığını göreceksiniz ve sonra duraklar çünkü bir değer
girmenizi ister.
Bir değer girin diyor.
Yani bu noktada, bir bir dizeye dönüştürebileceğim bir sayı çünkü
olan bu.
Bu yüzden burada sadece 56 diyeceğim.
Sonra da enter tuşuna basacağım.
Virüs tarayıcım yüzünden iki kez çalıştı.
Bu yüzden 56 diyeceğim ve sonra gireceğim.
Ve sonra 56 girdiğimi yazdırıyor.
Böylece bilgi girebildim, sayı ve bunu bir değişkende sakladı.
Şimdi tıpkı printf gibi, aslında birden fazla şey girmelerini sağlayabilir
ve birden fazla değişkende saklayın.
Bu yüzden burada bir tamsayı, başka bir yüzde söyleyeceğim, biçim
belirteci yüzde s, Bu da bir dize girmelerini istediğim anlamına gelir, bu da sadece bir
kelime aramaktır.
Yani burada, unutma, eğer bu bir kelimeyse, ben ampersand sağlamak zorunda değilsiniz.
Bu yüzden sadece şunu söyleyeceğim. karıştırın, bu verileri değişken
deposunda saklamak istiyorum.
Ve yine, değişkenler hakkında bilgi edineceğiz.
Ve sonra ben gidiyorum sadece yazdırmak için.
Ve başka bir değişken ekledim printf'i biliyorsunuz ve ben de sizden
önce iki nokta üst üste koyacağım yazdırdığınız formatı belirtmek
için, bu yüzden yüzde s'dirler.
Umarım anlaşılmıştır.
Şimdi iki bölüm halinde okuyacağım. girdileri boşluklarla ayırın, bunları iki
değişkende saklayın, I ve karıştırın ve ardından sergileyin.
Yani şimdi eğer inşa eder ve koşarsak.
Bu yüzden burada benim 22 numara, boşluk tuşuna basacağım ve sonra adımı gireceğim ve sonra return tuşuna
basacağım.
Bunu yaptığımda, program duraklatmaya geçecek ve I numarasını
gösterecek girilir ve ardından dize girilir.
Yani 22 ve Jason'ı gösteriyor.
Yani bu şekilde alabilirsiniz Kullanıcıdan gelen girdi, basit dört
veya beş satır kod.
Göstermek istediğim hızlı bir şey daha var çift olarak nasıl okuyabileceğinizdir.
Derslerin ilerleyen bölümlerinde float içine nasıl okunacağı gösterilecek
ve bu genellikle a biçimi belirtilen yüzde f.
Ama iki kat koşup okursanız, aslında biraz farklı, yüzde
lf kullanıyorsunuz, yani bir tür Bunu aklınızın bir köşesinde tutun.
Eğer double x adında bir değişken oluşturursam ve sonra bunu okumak için scanf kullanıyorum, yüzde LF kullanarak
okumam gerekiyor.
Bu format kullanmak istediğiniz belirtici.
Ve sonra yine tıpkı diğerlerinde adres için ve işareti
kullanır ve x dersiniz.
Ve işte bu şekilde özellikle çift olarak okuyun.
Ve bu farklı bir bir akış içinde okumaktan daha iyidir.
Bu yüzden bunu aklınızın bir köşesinde tutun.
Bunu çalıştırmaya gittiğinizde şunları fark edeceksiniz oldukça basit çalışıyor.
Ve girişi okuyabilirsiniz bir çift okuyor.
Yani devam edin ve bunu çalıştırın.
Ve bu yüzden soracak İki katı, pek bir şey yapmadım.
Ve bu çiftler 77 gibi olacak. 8 ve sonra onu okuyacağız ve saklayacağız,
bu oldukça basit.
Yani scanf çok bahsettiğim gibi faydalı.
Scanf ile ilgili diğer şeyler Kursta ilerledikçe fark
edeceksiniz ki, scanf bazen o kadar da iyi çalışmıyor.
F get'leri başka şeyler için de kullanabilirsiniz.
Scanf ile ilgili ana sorun şudur içeri okuduğunuzda, sadece bir boşluk görene
kadar içeri okursunuz.
Ve eğer kullanmaya çalışırsanız scanf'i bir işlev içinde
birden çok kez çağırmaya çalışırsınız.
Diğer kombinasyonlar ile çok iyi çalışmıyor
çünkü ne oluyor? klavyedeki geri dönüş düğmesi, o gitmeyecek
geri dönüş düğmesini okuyun çünkü sadece bir kelimeye kadar
okur.
Ve bu yüzden gitmiyor satır beslemesini almak için.
Yani bir dahaki sefere scanf kullandığınızda, hemen o satırı
atlayacak ve satır beslemesini okumak için.
Yani bu göreceğiniz bir sorun tek bir programda birbiri ardına
birden fazla scanf yazarsanız, diğer scanf'lerin
çalışmadığını fark edeceksiniz çünkü satır beslemesinde okuyorlar.
Bunu aşmanın çok kolay bir yolu bir scanf yaptıktan hemen sonra git char'ı
çağırırsınız ve sonra başka bir tarayıcı, ancak bu daha sonra konuşulacak
bir kavram.
Bu sadece size ne zaman scanf kullanarak bir çift okuduğunuzda,
yüzde LF kullandığınızdan emin olun.
Ve yine, bu yararlıdır çünkü bazı zorluklarımız kullanıcıdan girdi almak
için sizi hizalayacaktır faydalı şeyler yapmak ve farklı
kavramları öğrenmek için kullanıcıdan girdi alabilir.
Umarım bu yardımcı olmuştur.
Ve yine, bazılarını dert etmeyin tam olarak
anlamadığınız bu kavramların değişkenler ve dizeler gibi, tüm bunları
tartışacağız çok detaylı, teşekkür ederim.