Ana Sayfa

Bilgisayar Eğitim CD

Bilgisayar Kitapları

 
Bilgisayar Dershanesi Eğitim Marketi
 
Adım Adım Web Eğitim Seti Adobe Flash Eğitim Seti


C# Konsoldan Veri Girmek

Konsoldan Veri Girmek

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.

1–100 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.