Konsolu C++'da iostream Sınıflarıyla Yönetme

Managing Console With Iostream Classes C



Bilgisayarda konsol, bilgisayar klavyesi ve bilgisayar monitörüdür. Geçmişte çıktı, monitörde görüntülenen bir pencereye değil, doğrudan monitör ekranına gönderilirdi. Sıradan bir bilgisayar kullanıcısı için, günümüzdeki uygulamalar monitörü açıkça kullanmamaktadır. Bu uygulamalar monitörde görüntülenen pencereleri kullanır. Ancak, bilgisayar programcısının yine de monitör ekranını kullanması gerekir. Programcının hala monitör ekranını kullanması gerekmesine rağmen, işletim sistemi bunu yapmasına izin vermiyor. İşletim sistemi, monitör ekranını simüle eden bir pencere sağlar. Windows İşletim Sisteminde bu pencereye Komut İstemi denir. Linux İşletim Sisteminde ve türevlerinde bu pencereye terminal adı verilir.

Okuyucunun Komut İstemi'ni veya Terminal'i nasıl kullanacağını zaten bilmesi beklenir. Bu makale, klavyeden karakterlerin ve dizelerin nasıl okunacağını ve karakterlerin ve dizelerin terminale (veya komut istemine) nasıl gönderileceğini açıklar. Bu makalede her C++ programcısının bilmesi gerekir.







Klavyeden girdi almak ve terminale çıktı almak için program şu şekilde başlamalıdır:



#Dahil etmek
kullanarak ad alanısaat;

Makale İçeriği

Standart iostream'in Dar Akış Nesneleri

iostream sınıfı, standart nesneler, cout, cin, cerr ve clog, somutlaştırılmıştır ve zaten standart kitaplıkta bulunmaktadır. Programcı onları tekrar başlatmadan kullanır.



maliyet

main() işlevindeki aşağıdaki ifade metni gönderir, Bu çıktıdır. terminale:





maliyet << 'Bu çıktı.';

cout, standart kitaplıkta önceden oluşturulmuş bir çıktı iostream nesnesidir.<< is the insertion operator, which sent the bytes, This is output. to the output stream object, cout. When the statement is executed, the text appears on the screen.

Yukarıdaki ifadeyle, çıktı ifadesinin sağında yeniden görüntülenen komut istemi görünür. Bir sonraki satıra geçmiyor. endl, aşağıdaki ifadenin sonunda, ekran tarafından yazdırılan her şeyi bir sonraki satıra zorlar:



maliyet << 'Bu çıktı.' <<son;

endl önceden tanımlanmış bir değişkendir. Ekran içeriği ayrıca aşağıdakilerle bir sonraki satıra zorlanabilir:

maliyet << 'Bu çıktı.' << ' ';

' ' kullanımıyla, metnin tüm satırları hala ekranda hemen görünmeyebilir. endl, metnin tüm satırını ekrana boşaltır.

Not: cout'a gönderilen bir karakter çift tırnak içindeyken, gönderilen bir karakter tek tırnak içindedir. Bir ifadede bir dizi karakter dizisi ve karakter gönderilebilir, her birinin önünde<< . All that will appear in one line at the output if ‘ ’ is not in the series.

cin

cin, halihazırda somutlaştırılmış ve standart kitaplıkta mevcut olan standart iostream giriş nesnesidir. main() işlevinde aşağıdaki kod parçasını göz önünde bulundurun:

karaktertxt[elli];
maliyet << 'Bir kelime girin ve Enter'a basın:' txt;
maliyet <<txt<<son;

İlk ifade, 50 karakterlik boş bir dizi bildirir. İkinci ifade, kullanıcıya bir sonraki ekran satırına bir kelime yazması ve Enter tuşuna basması talimatını verir. Kullanıcıyı ekranın sonraki satırına metin girmeye zorlayan 'endl' kullanımına dikkat edin. Kullanıcı metin yazarken, girilen metin cin nesnesine giderken ekrana yankılanır. Enter'a bastıktan sonra kod bölümündeki üçüncü deyim yürütülür. Bu üçüncü ifade, girilen metni txt değişkenine gönderir. Bu durumda girilen metin 50 karakterden uzun olmamalıdır. Çıkarma operatörünün kullanımına dikkat edin, >>. Son ifade, girilen metni ekranda görüntüler.

cin, klavyeden boşluklarla ayrılmış birden fazla kelime alabilir. Bu kelimelerin farklı değişkenlere çıkarılması gerekecektir. Aşağıdaki kod segmenti bunu göstermektedir:

karaktertxt[yirmi];
into;
batmadan yüzmekft;
maliyet << '3 değer girin ve Enter'a basın:' txt>>o>>ft;
maliyet <<txt<< '' <<o<< '' <<ft<<son;

Açıklamaya dikkat edin:

cin >>txt>>o>>ft;

İlk kelime txt'ye, yanındaki kelimeye ve son kelime ft'ye çıkarılır. Girdi ise,

bir25 3.6

o zaman kod segmentinin çıktısı şöyle olur,

bir25 3.6

sertifika

Aşağıdaki programda bir hata var:

#Dahil etmek
kullanarak ad alanısaat;

intana()
{
myInt'de;

dönüş 0;
}

main() içindeki ilk ifade doğru değil. Kodu içeren dosyanın adı temp.cc ise ve ortaya çıkan yürütülebilir dosya temp olarak adlandırılacaksa, aşağıdaki g++ komutu derleyici hata mesajını dosyaya error.txt gönderir:

G++ -o sıcaklık sıcaklığıDC 2>hata.txt

error.txt dosyası yoksa, oluşturulur. g++ komutunun 2>error.txt bölümüne dikkat edin.

Ekran standart çıktı hedefidir ve aynı zamanda standart hata hedefidir. 2>error.txt g++ komutundan çıkarılırsa, derleyici hata mesajı hala ekran (monitör) olan standart hata hedefine gönderilir.

Standart çıktı hedefini temsil eden akış nesnesi cout'tur. Standart hata hedefini temsil eden akış nesnesi cerr'dir. Ekrana aşağıdaki gibi bir program çalışma zamanı hatası gönderilebilir:

sertifika << 'Hata mesajı!' << ' ';

tıkamak

Bir uygulama farklı zamanlarda farklı girdiler alır. Tüm girişler ekranda yeniden görüntülenebilir. Tüm girdiler bir dosyaya kaydedilebilir. Bu günlüğe kaydetme. Standart günlük kaydı hedefi ekrandır. Standart günlük akışı nesnesi bir tıkanıklıktır. Aşağıdaki kod, giriş metnini ekrana yeniden gösterecektir:

karaktertxt[elli];
maliyet<<'Metni girin ve Enter'a basın:'txt;
tıkamak<<txt<<son;

Giriş metni 'input_text' ise, tıkanıklık ekranda 'input_text' öğesini yeniden görüntüler.

Uygulamada, günlük kaydı genellikle bir dosyaya yönlendirilir. Aşağıdaki program bunu göstermektedir:

#Dahil etmek
kullanarak ad alanısaat;

intana()
{
serbest( 'log.txt','içinde',standart);

maliyet << 'giriş metni' <<son;
}

freopen() işlevinin ve argümanlarının kullanımına dikkat edin. İlk argümanı günlük dosyasının adıdır. Dosya yoksa, oluşturulur. İkinci argümanı 'yazmak' için 'w'dir. Üçüncü argümanı standart çıktı için stdout'tur. main() işlevindeki ikinci ifade, günlük metnini dosyaya göndermek için cout'u kullanır. Not: Gerçek giriş kodu bu programda gösterilmemiştir.

Klavyeden Karakter ve Dize Alma

Kullanıcı girdi yazarken, karakterler girdi akışı arabelleğine gönderilir ve ekranda görüntülenir. Kullanıcı Enter tuşuna bastığında, tüm karakterler arabellekte bulunur; ayrıca, imleç ekranda aşağıdaki bir sonraki satırın başına gider. Program daha sonra girdi okuma ifadesinden sonra bir sonraki program ifadesine devam eder.

Cin nesnesi, bu bölümün ilgili olduğu yöntemlere sahiptir.

İlk Karakteri Okumak

get(char_type&c):
Aşağıdaki kod bölümü, giriş akışı arabelleğinden ilk karakterin nasıl okunacağını gösterir:

karakterch;
maliyet << 'Giriş metni:' <<son;
cin.elde etmek(ch);
maliyet <<ch<<son;

İlk ifade, atamasız bir karakter bildirir. İkinci ifade, kullanıcıya bir karakter girmesini söyler. Kullanıcı karakter yazıp Enter tuşuna bastığında, üçüncü ifade karakteri girdi akışı arabelleğinden ch değişkenine kopyalar.

Kullanıcı birden fazla karakter yazsa bile, ilk karakter kod segmenti tarafından alınacaktır.

elde etmek():
get() bağımsız değişken olmadan, ondalık ASCII kodunu döndürür. Aşağıdaki kod segmentini göz önünde bulundurun:

maliyet << 'Giriş metni:' <<son;
maliyet << cin.elde etmek() <<son;

Giriş 'asdfg' ise, 'a' için ondalık ASCII kodu olan 97 döndürülür.

get(char_type* s, akış boyutu n)

Kullanıcı bir cümle girdikten ve Enter tuşuna bastıktan sonra, ilkinden başlayarak bir dizi karakter cin akışı tamponundan çıkarılabilir. Aşağıdaki kod kullanılabilir:

karakterP[10];
maliyet << 'Giriş metni:' <<son;
cin.elde etmek(sokak,10);
maliyet <<P<<son;

Girdi 'harika insanlar' ise, çıktı 10 değil 9 karakterlik 'harika peo' olacaktır. NUL karakteri () get bağımsız değişkeninde onuncu konumu alır. Bu nedenle, str'de 9 karakter olması için depolama boyutunun en az 10 olması ve get() argümanının 11 olması gerekir. Giriş satırının tamamı isteniyorsa, dize depolama numarası en az sayı olmalıdır. yazılan karakter sayısı artı 1. Yani, tüm satır için 12 karakter yazılırsa, sayı dizge (str) depolama boyutu için 13 ve get() argümanı için 13 olmalıdır. Bir boşluğun bir karakter olarak sayıldığını unutmayın.

get(char_type* s, akış boyutu n, char_type sınırlandırma)
Belirli bir karakterin ilk oluşumuyla veya alt dizenin akış boyutuyla (hangisi önce gelirse) sağda sınırlandırılmış bir alt dize çıkarmak mümkündür. Aşağıdaki kodun giriş metni harika insanlarsa, o zaman harika çıkarılacaktır:

karakterP[30];
maliyet << 'Giriş metni:' <<son;
cin.elde etmek(sokak,6,'veya');
maliyet <<P<<son;

Baştan itibaren altıncı konum boşluk karakteridir ve çıkarılan alt dizeyi özel olarak sınırlar. Altıncı konum, tek karakter olan 'o'dan önce gelir. str için depolama boyutunun mümkün olduğunca yüksek olabileceğini unutmayın.

Aşağıdaki koda giriş metni harika insanlarsa, gr ayıklanır:

karakterP[30];
maliyet << 'Giriş metni:' <<son;
cin.elde etmek(sokak,10,'Ve');
maliyet <<P<<son;

'e'nin ilk oluşumu, onuncu pozisyondan önce gelir.

Bir Çizginin Tüm Karakterlerini Alma

Enter tuşuna bastıktan sonra, satıra yazılan tüm karakterler aşağıdaki kodda gösterildiği gibi alınabilir:

maliyet << 'Giriş metni:' <<son;
süre (1) {
karakterch= (karakter)cin.elde etmek();
maliyet <<ch;
Eğer (ch== ' ')
kırmak;
}

(char) ile döküm, her ondalık sayıyı karşılık gelen ASCII karakterine dönüştürür.

dikizlemek()

get() üye işlevleri yalnızca bir sonraki karakteri okumaz; onu akış arabelleğinden kaldırırlar. Ancak, peek() üye işlevi basit bir sonraki karakteri (ilk karakterden başlayarak) arabellekten kaldırmadan okur. Aşağıdaki kodda, her karakter, get() işlevi tarafından kaldırılmadan önce peek() işleviyle okunur. Kullanıcı Enter tuşuna bastıktan sonra olan her şey:

maliyet << 'Giriş metni:' <<son;
süre (1) {
karakterch= (karakter)cin.dikizlemek();
maliyet <<ch;
cin.elde etmek();
Eğer (ch== ' ')
kırmak;
}

Sonraki karakterler get() tarafından kaldırılmamışsa, peek() yalnızca ilk karakteri okuyor olur ve döngü süresiz olarak yinelenir.

Enter'a basmadan önce Karakterleri Görüntüleme ve Silme

Cin nesnesiyle, işlem yapılmadan önce Enter tuşuna basılması gerektiğine dikkat edin. Peki, karakterlerin yazı yazarken görüntülenmesi ve Enter tuşuna basmadan silinmesi mümkündür. Ancak bu, işletim sistemiyle arayüz oluşturmak anlamına gelir. İşletim sistemleri farklıdır. Yani bu, farklı işletim sistemleri için farklı kodlama anlamına gelir. Dolayısıyla bu konu tamamen farklı bir eğitimi hak ediyor – daha sonra bakınız.

Monitöre Karakterler ve Dizeler Gönderme

cout nesnesi, halihazırda somutlaştırılmış ve C++ standart kitaplığında bulunan bir çıktı akışı nesnesidir. cout, monitöre karakter ve dize göndermede kullanılan ana nesnedir. Bu, ekleme operatörü ile yapılır,<< . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until ‘ ’ or endl is encountered.

Skalerlerle sonuçlanan ifadeler, ekleme operatörü için bağımsız değişkenler olabilir. Operatör, skaleri metne dönüştürür ve metni cout nesne akışına yerleştirir. Cout nesnesine metin gönderildiğinde, normalde ekranda (monitör) görünür. Ancak, bazen, hemen görünmeyebilir. Metni ekrana zorlamak için, metni ekledikten hemen sonra endl özel değerini girin. Bu, metnin ekrana temizlenmesine neden olacak ve yeni bir satır eklenecektir. Not: ' ' yalnızca yeni bir satır ekler ancak metni ekrana boşaltmaz.

Aşağıdaki program int, float ve normal text değerlerinin ekrana nasıl yazdırılacağını gösterir:

#Dahil etmek
kullanarak ad alanısaat;

intana()
{
into= 5;
batmadan yüzmekft= 63,5;
maliyet << 'NS ' <<o<< 'ürünlerin maliyeti $' <<ft<< ' BİZ.' <<son;

dönüş 0;
}

Çıktı:

NS5öğelerin maliyeti $63,5BİZ.

Aşağıdaki program, bir sınıftan örneklenen bir nesnenin dizesinin nasıl yazdırıldığını gösterir:

#Dahil etmek
kullanarak ad alanısaat;

yapıNS{
karakterP[on bir] = 'Bazı kelimeler';
}nesne;

intana()
{
maliyet <<nesneP << ' ';

dönüş 0;
}

Çıktı 'bazı kelimeler'.

Bir C++ Programı için Argümanlar

Programın yürütülmesi main() işlevinden başlar. main() işlevi aslında iki isteğe bağlı parametreye sahiptir. İsteğe bağlı parametrelerle main() işlevinin sözdizimi şöyledir:

intana(intargc,karakter *bağımsız değişken[argc])
{

dönüş 0;
}

Yürütülebilir C++ dosyasının adının temp olduğunu varsayın. Programın ortamından (işletim sistemi) ihtiyaç duyduğu, kullanıcı tarafından yazılan argümanların şöyle olduğunu varsayalım:

nesne3kitap kalemi'büyük ev'

Burada 5 argüman var: makaleler, 3, kitap, kalem ve büyük ev

Her biri metindir. Bir programın numaralı argümanı metindir. Başka bir deyişle, her argüman bir dizedir. büyük ev bir deyim olduğu için tırnak içindedir. Bu programı çalıştırmak için terminal komutu şöyle olacaktır:

./geçici makaleler3kitap kalemi'büyük ev'

Dosya sıcaklığının ana dizinde olduğunu varsayarsak. Argümanları virgülle değil, boşluklarla ayırdığını unutmayın.

Şimdi, main() işlevinin söz diziminde, argc, program için argüman sayısı artı 1'dir. Bu durumda, program için 5 argüman vardır. Yani, argc 6'dır. Sözdiziminde, argv[argc], dizgelere işaret eden bir dizidir. Bu dizi için argv[0]'daki ilk değer derleyici tarafından verilir. Program dosyasının adının bir göstergesidir. Değerlerin geri kalanı, kullanıcının yazdığı sırayla program argümanlarının işaretçileridir. Bu dizinin boyutu argc'dir. Bu durumda boyut 1 + 5 = 6'dır.

Derleme sırasında aşağıdaki programın temp olarak adlandırıldığını varsayın:

#Dahil etmek
kullanarak ad alanısaat;

intana(intargc,karakter**bağımsız değişken)
{

maliyet <<bağımsız değişken[0] << ',' <<bağımsız değişken[1] << ',' <<bağımsız değişken[2] << ',' <<bağımsız değişken[3] << ',' <<bağımsız değişken[4] << ',' <<bağımsız değişken[5] <<son;

dönüş 0;
}

Burada, 'char *argv[argc]' dizisinin 'char** argv' olarak bildirildiğini unutmayın.

Bu program terminal komutu ile çalıştırılırsa,

./geçici makaleler3kitap kalemi'büyük ev'

o zaman çıktı şöyle olurdu:

./sıcaklık, makaleler,3, kitap, kalem, büyük ev

Dizin yolunun yürütülebilir dosyanın adıyla birlikte eklendiğini unutmayın.

Ayrıca, programın çalıştırılması sırasında (programın çağrılması) argc değerinin gönderilmediğine dikkat edin.

Çözüm

iostream sınıfının cout, cin, cerr ve clog olmak üzere dört önemli nesnesi vardır. cin bir girdi nesnesidir, geri kalanı ise çıktı nesneleridir. Bir program çalışırken, programa giriş, programın çalışmaya başlayacağı zamandan farklıdır. Bir program çalışmaya başladığında, programa giriş, programı çalıştırmak için boşluklarla ayrılmış komutla birleştirilir.