KONSOLDAN VERİ GİRMEK
Programlar çoğu zaman
bizim girdiğimiz verilere göre işlemlerini yürütürler. Daha önce,
görsel programlarda fare hareketleri ile, butonlara tıklamalarla
veya yazı kutularına klavyeden bir şeyler yazarak veri girişi
yaptık. Veri girişlerinin klavye veya fare ile yapıldığını bu
nedenle biliyoruz zaten.
C# konsol
uygulamalarında veri girişi daima klavyeden yazı yazma ile
gerçekleşir. Genellikle konsol uygulamalarında program
kullanıcıdan bir şeyler girmesini ister ve kullanıcının verdiği
yanıta göre kullanıcının ne demek istediğini anlamaya çalışır.
İşte bizim konsolda klavyeden
giriş yapmamızı sağlayan Console sınıfının Read ve ReadLine
yöntemleridir. Console.WriteLine ve Console.Write yöntemlerini
kullanırken giriş argümanlarını yazmamız gerekiyordu. Ve bu
yöntemlerden dönen bir argüman yoktu. Console.Read ve Console.ReadLine
yöntemlerinde ise giriş argümanı yok ama bu yöntemlerden dönen
dönüş argümanları mevcut. Biz bu iki yöntemi içeren bir program
yazdığımızda ve bu yöntemleri çağırdığımızda kontrol biz Enter
tuşuna basana kadar programa tekrar geçmeyecektir. Buradan da bu
iki yöntemin ve dolayısı ile programın çalışmaya devam edebilmesi
için bu yöntemlerin çağrıları yapıldıktan sonra Enter tuşuna
basmamız gerektiğini anlıyoruz. Bu arada Console.ReadLine
yönteminin bu iki yöntem içinde kullanımı kolay olan yöntem
olduğunu söyleyebiliriz. Şimdi konsoldan string girişi yapan ilk
programı yazalım.
1 |
string yazi; |
2 |
yazi = Console.ReadLine(); |
Yukarıda görüldüğü gibi
1. satırda string tipinde bir değişken tanımlandı ve ikinci
satırda Console.ReadLine() yöntemi çağrılarak yazı adlı stirng
değişkene bu yöntemden dönen ( kullanıcının konsol ekranında
yazdıkları ) değerler atandı. Burada dikkati çeken bir noktada
Console.ReadLine yönteminden dönen değerin string bir değişken
herhangi bir işleme tabi tutulmadan direkt olarak atanabildiğidir.
Burada iki satırda
yaptığımız işlemi tek satırda da gerçekleştirebilmemizin mümkün
olduğunu biliyoruz.
1 |
string yazi = Console.ReadLine(); |
Şimdi kullanıcıdan bir
şeyler alan bir program yazalım.
1 |
using System; |
2 |
class KonsoldanVeriGirisi |
3 |
{ |
4 |
static void Main() |
5 |
{ |
6 |
Console.Write("Bir şeyler yaz ve
Enter tuşuna bas:"); |
7 |
string yazi = Console.ReadLine(); |
8 |
Console.WriteLine("Klavyeden
yazdığınız yazı:" + yazi ); |
9 |
} |
10 |
} |
Yukarıdaki programda
kullanıcıdan bir şeyler yazmasını istedik ve bu yazdıklarını bir
string değişkene Console.ReadLine yöntemi ile atayarak daha sonra
bu değişkeni Console.WriteLine yöntemi ile konsolda görüntüledik.
Burada dikkat edilirse ilk satırda Write yöntemi kullanıldı çünkü
kullanıcının yazdıklarının bizim Console.Write yöntemi ile konsola
yazdırdığımız yazıların yanına yazılmasını istedik. Kullanıcı bir
şeyler yazıp Enter tuşuna bastığında Console.ReadLine yöntemi
imlecin aşağı satıra düşmesini sağlıyor. Tam bu sırada Console.ReadLine
yöntemi değer döndürme işlemini gerçekleştiriyor.
Console.WriteLine ve
Console.Write yöntemleri bir integer değişkeni kapalı bir şekilde
string tipine dönüştürerek konsola yazdırıyordu. Ama Console.ReadLine
yönteminin böyle bir özelliği mevcut değil. Yani biz klavyeden bir
integer okumak istediğimizde bunu Int32.Parse yöntemini kullanarak
integer tipine çevirmemiz gerkiyor.
1 |
using System; |
2 |
class KonsoldanVeriGirisi |
3 |
{ |
4 |
static void Main() |
5 |
{ |
6 |
string S; |
7 |
int I; |
8 |
Console.Write("Bir sayı yaz ve Enter
tuşuna bas:"); |
9 |
S = Console.ReadLine(); |
10 |
I = Int32.Parse( S ); |
11 |
Console.WriteLine(Girdiğin numara:
+ I ); |
12 |
} |
13 |
} |
Yukarıdaki programda
iki durumdan söz edebiliriz. Birincisi; Console.ReadLine
yönteminden dönen değerin bir string olması ve string değişkene
doğrudan atanabilmesi. İkincisi ise; bu string değişkenin Int32.Parse
yöntemi ile integer bir değişkene aktarılması.
Ayrıca buradaki S
string değişkenini Console.ReadLine ve Int32.Parse yöntemlerini
birleştirerek ortadan kaldırabiliriz.
1 |
I
= Int32.Parse(Console.ReadLine()); |
Bu satırda ilk olarak
Console.ReadLine yöntemi çağrılıyor ve konsoldan girilen yazıları
okuyor. Daha sonra okuduğu değerleri Int32.Parse yöntemine
aktarıyor.
Şimdi kullanıcıdan sayı
almayı bildiğimize göre gerçek hayata yakın bir program
yazabiliriz.
1 |
using System; |
2 |
class Bilet |
3 |
{ |
4 |
static void Main() |
5 |
{ |
6 |
int YetiskinUcreti = 10 ,
CocukUcreti =7 ; |
7 |
|
8 |
Console.Write("Yetişkin bilet
adedini giriniz:"); |
9 |
int YetiskinBiletSayisi = Int32.Parse(Console.ReadLine()); |
10 |
|
11 |
Console.Write("Cocuk bilet adedini
giriniz:"); |
12 |
int CocukBiletSayisi = Int32.Parse(Console.ReadLine()); |
13 |
|
14 |
int ToplamMaliyet = YetiskinUcreti *
YetiskinBiletSayisi + CocukUcreti*CocukBiletSayisi; |
15 |
|
16 |
Console.WriteLine("Toplam bilet
ücreti=" + ToplamMaliyet); |
17 |
} |
18 |
} |
Program kullanıcıdan
yetişkin ve çocuk bilet adedini alıyor. Daha sonra, önceden
bildiği bilet ücretleri ile adetleri çarpıp toplam ücreti bize
söylüyor.
Konsoldan veri girişi
yapmak konsol çıktısı almaktan daha zordur. Veri girişlerinde
kontrol her zaman zordur. Kullanıcı konsoldan istediğimiz şartlara
uymayan veriler de girebilir.
Mesela program
aşağıdaki konsol çıktısını verir.
1100 arasında bir sayı
giriniz:
Ve kullanıcı aşağıdaki
ifadeyi girer.
10A
Burada yanlış yazılma
ihtimali var. Ama başka programlarda olduğu gibi yanlış yazıları
düzelten bir durum söz konusu değil. Bazı programlar bu tür
yanlışlar için doğrulama ve kontrol etme işlemleri
gerçekleştirirler. Mesela yanlış yazılan A harfini ekrana
yazmamak veya bir beep sesi ile uyarmak gibi. Ama maalesef. Net
konsolu bu tür tekniklere izin vermez. Konsol kullanıcının satır
boyunca yazmasını ve Enter tuşuna basmasını bekler ve kullanıcının
yazdığını işlemeye başlar. Eğer uygun giriş yapılmamışsa sonuç
elde edilemez. Ama kullanıcıdan tekrar giriş yapması istenebilir.
Kullanıcı girişlerini
kontrol eden ve oluşan istisnaları anlaşılır bir şekilde
kullanıcıya gösteren kontrol yapıları daha sonraki yazılarda
bahsedilecek.