Mengelola Konsol dengan Kelas iostream di C++

Managing Console With Iostream Classes C



Dalam komputasi, konsol adalah keyboard komputer dan monitor komputer. Di masa lalu, output dikirim langsung ke layar monitor dan bukan ke jendela yang ditampilkan di monitor. Untuk pengguna komputer biasa, aplikasi saat ini tidak menggunakan monitor secara eksplisit. Aplikasi ini menggunakan jendela yang ditampilkan di monitor. Namun, programmer komputer masih perlu menggunakan layar monitor. Meskipun programmer masih perlu menggunakan layar monitor, sistem operasi tidak mengizinkannya melakukan itu. Sistem operasi menyediakan jendela yang mensimulasikan layar monitor. Di Sistem Operasi Windows, jendela ini disebut Command Prompt. Pada Sistem Operasi Linux dan variannya, jendela ini disebut terminal.

Diharapkan pembaca sudah mengetahui cara menggunakan Command Prompt atau Terminal. Artikel ini menjelaskan cara membaca karakter dan string dari keyboard dan mengirim karakter dan string ke terminal (atau command prompt). Setiap programmer C++ perlu tahu di artikel ini.







Untuk mendapatkan input dari keyboard dan output ke terminal, program harus dimulai dengan:



#termasuk
menggunakan ruang namajam;

Isi Artikel

Objek Aliran Sempit dari iostream Standar

Kelas iostream, objek standar, cout, cin, cerr, dan clog, telah dipakai dan sudah ada di pustaka standar. Pemrogram hanya menggunakannya tanpa membuat instance lagi.



biaya

Pernyataan berikut dalam fungsi main() mengirimkan teks, Ini adalah output. ke terminal:





biaya << 'Ini adalah keluaran.';

cout adalah objek iostream keluaran di perpustakaan standar, sudah dipakai.<< 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.

Dengan pernyataan di atas, prompt perintah yang ditampilkan kembali muncul di sebelah kanan frase output. Itu tidak pergi ke baris berikutnya. endl di akhir pernyataan berikut akan memaksa apa pun yang dicetak oleh layar ke baris berikutnya:



biaya << 'Ini adalah keluaran.' <<akhir;

endl adalah variabel yang telah ditentukan. Konten layar juga dapat dipaksa ke baris berikutnya dengan:

biaya << 'Ini adalah keluaran.' << ' ';

Dengan penggunaan ' ', semua baris teks mungkin masih tidak langsung muncul di layar. endl mem-flush baris teks lengkap ke layar.

Catatan: string yang dikirim ke cout dalam tanda kutip ganda, sedangkan karakter yang dikirim dalam tanda kutip tunggal. Serangkaian string dan karakter dapat dikirim dalam satu pernyataan, masing-masing didahului oleh<< . All that will appear in one line at the output if ‘ ’ is not in the series.

gin

cin adalah objek input iostream standar, sudah dipakai, dan tersedia di perpustakaan standar. Pertimbangkan segmen kode berikut dalam fungsi main():

arangtxt[lima puluh];
biaya << 'Masukkan kata dan tekan Enter:' txt;
biaya <<txt<<akhir;

Pernyataan pertama mendeklarasikan array kosong berisi 50 karakter. Pernyataan kedua menginstruksikan pengguna untuk mengetikkan kata pada baris layar berikutnya dan tekan tombol Enter. Perhatikan penggunaan 'endl' yang memaksa pengguna untuk memasukkan teks di baris layar berikutnya. Saat pengguna mengetik teks, teks yang dimasukkan bergema ke layar saat masuk ke objek cin. Setelah menekan Enter, pernyataan ketiga di segmen kode dieksekusi. Pernyataan ketiga ini mengirimkan teks yang dimasukkan ke variabel, txt. Teks yang dimasukkan tidak boleh lebih dari 50 karakter dalam hal ini. Perhatikan penggunaan operator ekstraksi, >>. Pernyataan terakhir menampilkan teks yang dimasukkan di layar.

cin dapat mengambil lebih dari satu kata dari keyboard, dipisahkan oleh spasi. Kata-kata ini harus diekstraksi ke dalam variabel yang berbeda. Segmen kode berikut menggambarkan hal ini:

arangtxt[dua puluh];
ke dalamdia;
mengambangkaki;
biaya << 'Masukkan 3 nilai dan tekan Enter:' txt>>dia>>kaki;
biaya <<txt<< '' <<dia<< '' <<kaki<<akhir;

Perhatikan pernyataan:

gin >>txt>>dia>>kaki;

Kata pertama diekstraksi ke txt, di sebelahnya, dan yang terakhir ke ft. Jika inputnya adalah,

satu25 3.6

maka output oleh segmen kode adalah,

satu25 3.6

cerr

Program berikut memiliki kesalahan:

#termasuk
menggunakan ruang namajam;

ke dalamutama()
{
di myInt;

kembali 0;
}

Pernyataan pertama di main() tidak benar. Jika nama file yang memiliki kode adalah temp.cc dan file yang dapat dieksekusi yang dihasilkan disebut temp, maka perintah g++ berikut akan mengirim pesan kesalahan kompiler ke file, error.txt:

G++ -o suhu suhuDC 2>kesalahan.txt

Jika file error.txt tidak ada, itu akan dibuat. Perhatikan bagian 2>error.txt dari perintah g++.

Layar adalah tujuan keluaran standar, dan juga merupakan tujuan kesalahan standar. Jika 2>error.txt dihilangkan dari perintah g++, maka pesan kesalahan kompilator akan dikirim ke tujuan kesalahan standar, yang masih berupa layar (monitor).

Objek aliran yang mewakili tujuan keluaran standar adalah cout. Objek aliran yang mewakili tujuan kesalahan standar adalah cerr. Kesalahan runtime program dapat dikirim ke layar sebagai berikut:

cerr << 'Pesan kesalahan!' << ' ';

menyumbat

Sebuah aplikasi mengambil input yang berbeda pada waktu yang berbeda. Semua input dapat ditampilkan kembali di layar. Semua input dapat disimpan dalam file. Ini adalah pencatatan. Tujuan logging standar adalah layar. Objek aliran logging standar adalah bakiak. Kode berikut akan menampilkan kembali teks input ke layar:

arangtxt[lima puluh];
biaya<<'Masukkan teks dan tekan Enter:'txt;
menyumbat<<txt<<akhir;

Jika teks input adalah 'input_text', maka clog akan menampilkan kembali 'input_text' ke layar.

Dalam praktiknya, logging biasanya diarahkan ke file. Program berikut menggambarkan hal ini:

#termasuk
menggunakan ruang namajam;

ke dalamutama()
{
buka bebas( 'log.txt','di dalam',stdout);

biaya << 'Masukkan teks' <<akhir;
}

Perhatikan penggunaan fungsi, freopen(), dan argumennya. Argumen pertamanya adalah nama file log. Jika file tidak ada, itu akan dibuat. Argumen kedua adalah 'w' untuk 'tulis'. Argumen ketiganya adalah stdout untuk output standar. Pernyataan kedua dalam fungsi main() menggunakan cout untuk mengirim teks logging ke file. Catatan: Kode input yang sebenarnya belum ditampilkan dalam program ini.

Memperoleh Karakter dan String dari Keyboard

Saat pengguna mengetik input, karakter dikirim ke buffer aliran input dan ditampilkan di layar. Ketika pengguna menekan tombol Enter, semua karakter berada di buffer; juga, kursor menuju ke awal baris berikutnya di bawah, di layar. Program kemudian melanjutkan ke pernyataan program berikutnya, setelah pernyataan pembacaan input.

Objek cin memiliki metode, yang menjadi perhatian bagian ini.

Membaca Karakter Pertama

dapatkan(char_type& c):
Segmen kode berikut menunjukkan cara membaca karakter pertama, dari buffer aliran input:

arangch;
biaya << 'Masukkan teks:' <<akhir;
gin.Dapatkan(ch);
biaya <<ch<<akhir;

Pernyataan pertama mendeklarasikan karakter tanpa penugasan. Pernyataan kedua memberitahu pengguna untuk memasukkan karakter. Ketika pengguna mengetik karakter dan menekan tombol Enter, pernyataan ketiga menyalin karakter dari buffer aliran input ke dalam variabel, ch.

Bahkan jika pengguna mengetik lebih dari satu karakter, karakter pertama akan diambil oleh segmen kode.

Dapatkan():
get() tanpa argumen, mengembalikan kode ASCII desimal. Perhatikan segmen kode berikut:

biaya << 'Masukkan teks:' <<akhir;
biaya << gin.Dapatkan() <<akhir;

Jika inputnya adalah 'asdfg', maka 97 akan dikembalikan, yang merupakan kode ASCII desimal untuk 'a'.

dapatkan(char_type* s, ukuran aliran n)

Setelah pengguna memasukkan frasa dan menekan tombol Enter, sejumlah karakter mulai dari yang pertama, dapat diekstraksi dari buffer aliran cin. Kode berikut dapat digunakan:

arangP[10];
biaya << 'Masukkan teks:' <<akhir;
gin.Dapatkan(str,10);
biaya <<P<<akhir;

Jika inputnya adalah 'orang hebat', maka outputnya adalah 'orang hebat', terdiri dari 9 karakter dan bukan 10. Karakter string NUL () menempati posisi kesepuluh dalam argumen get. Jadi, untuk memiliki 9 karakter dalam str, ukuran penyimpanannya harus minimal 10, dan argumen get() harus 11. Jika seluruh baris input diinginkan, maka nomor penyimpanan string setidaknya harus nomor karakter yang diketik, ditambah 1. Jadi, jika 12 karakter diketik untuk seluruh baris, maka jumlahnya harus 13 untuk ukuran penyimpanan string (str) dan 13 untuk argumen get(). Perhatikan bahwa satu spasi dihitung sebagai satu karakter.

get(char_type* s, streamsize n, char_type delim)
Dimungkinkan untuk mengekstrak sub-string, dibatasi di sebelah kanan, dengan kemunculan pertama dari karakter tertentu, atau dengan ukuran aliran sub-string, mana yang lebih dulu. Jika teks input ke kode berikut adalah orang-orang hebat, maka hebat akan diekstraksi:

arangP[30];
biaya << 'Masukkan teks:' <<akhir;
gin.Dapatkan(str,6,'atau');
biaya <<P<<akhir;

Posisi keenam dari awal adalah karakter spasi, dan itu membatasi substring yang diekstraksi secara eksklusif. Posisi keenam didahulukan sebelum satu-satunya karakter, 'o'. Perhatikan bahwa ukuran penyimpanan untuk str bisa setinggi mungkin.

Jika teks input ke kode berikut adalah orang-orang hebat, maka gr akan diekstraksi:

arangP[30];
biaya << 'Masukkan teks:' <<akhir;
gin.Dapatkan(str,10,'Dan');
biaya <<P<<akhir;

Kemunculan pertama 'e', ​​muncul lebih dulu sebelum posisi kesepuluh.

Mendapatkan semua Karakter Garis

Setelah menekan tombol Enter, semua karakter yang diketik ke dalam baris, dapat diperoleh seperti yang ditunjukkan pada kode berikut:

biaya << 'Masukkan teks:' <<akhir;
ketika (1) {
arangch= (arang)gin.Dapatkan();
biaya <<ch;
jika (ch== ' ')
merusak;
}

Casting dengan (char), mengubah setiap angka desimal menjadi karakter ASCII yang sesuai.

mengintip()

Fungsi anggota get() tidak hanya membaca karakter berikutnya; mereka menghapusnya dari buffer aliran. Namun, fungsi anggota peek() sederhana membaca karakter berikutnya (dimulai dari yang pertama) tanpa menghapusnya dari buffer. Dalam kode berikut, setiap karakter pertama kali dibaca dengan fungsi peek() sebelum dihapus, oleh fungsi get(). Semua itu terjadi setelah pengguna menekan tombol Enter:

biaya << 'Masukkan teks:' <<akhir;
ketika (1) {
arangch= (arang)gin.mengintip();
biaya <<ch;
gin.Dapatkan();
jika (ch== ' ')
merusak;
}

Jika karakter berikutnya tidak dihapus oleh get(), peek() hanya akan membaca karakter pertama, dan loop akan berulang tanpa batas.

Menampilkan dan Menghapus Karakter sebelum menekan Enter

Perhatikan bahwa dengan objek cin, tombol Enter harus ditekan sebelum akan ada tindakan. Nah, ada kemungkinan karakter ditampilkan saat diketik dan dihapus sebelum menekan tombol Enter. Namun, itu berarti berinteraksi dengan sistem operasi. Sistem operasi berbeda. Jadi ini berarti pengkodean yang berbeda untuk sistem operasi yang berbeda. Jadi topik ini layak mendapatkan tutorial yang sama sekali berbeda – lihat nanti.

Mengirim Karakter dan String ke Monitor

Objek cout adalah objek aliran keluaran, sudah dipakai dan ada di pustaka standar C++. cout adalah objek utama yang digunakan dalam pengiriman karakter dan string ke monitor. Ini dilakukan dengan operator penyisipan,<< . 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.

Ekspresi yang menghasilkan skalar dapat menjadi argumen untuk operator penyisipan. Operator mengubah skalar menjadi teks dan menempatkan teks dalam aliran objek cout. Ketika teks dikirim ke objek cout, biasanya muncul di layar (monitor). Namun, terkadang, itu mungkin tidak segera muncul. Untuk memaksa teks ke layar, masukkan nilai khusus, endl, tepat setelah memasukkan teks. Ini akan menyebabkan teks memerah ke layar, dan baris baru akan ditambahkan. Catatan: ' ' hanya menambahkan baris baru tetapi tidak menghapus teks ke layar.

Program berikut menunjukkan cara mencetak nilai int, float, dan teks biasa, ke layar:

#termasuk
menggunakan ruang namajam;

ke dalamutama()
{
ke dalamdia= 5;
mengambangkaki= 63.5;
biaya << 'NS ' <<dia<< ' barang berharga $' <<kaki<< ' KITA.' <<akhir;

kembali 0;
}

Outputnya adalah:

NS5barang berharga $63.5KITA.

Program berikut menunjukkan bagaimana string objek yang dibuat dari kelas dicetak:

#termasuk
menggunakan ruang namajam;

strukturNS{
arangP[sebelas] = 'beberapa kata';
}obj;

ke dalamutama()
{
biaya <<obj.P << ' ';

kembali 0;
}

Outputnya adalah 'beberapa kata'.

Argumen untuk Program C++

Eksekusi program dimulai dari fungsi main(). Fungsi main() sebenarnya memiliki dua parameter opsional. Sintaks fungsi main() dengan parameter opsional, adalah:

ke dalamutama(ke dalamargc,arang *argv[argc])
{

kembali 0;
}

Asumsikan bahwa nama file C++ yang dapat dieksekusi adalah temp. Asumsikan bahwa argumen yang dibutuhkan program dari lingkungannya (sistem operasi), diketik oleh pengguna, adalah,

artikel3pena buku'rumah besar'

Ada 5 argumen di sini: artikel, 3, buku, pena, dan rumah besar

Masing-masing adalah teks. Argumen bernomor untuk suatu program adalah teks. Dengan kata lain, setiap argumen adalah string. rumah besar ada dalam tanda kutip karena itu adalah ungkapan. Perintah terminal untuk menjalankan program ini adalah:

./artikel temporer3pena buku'rumah besar'

Dengan asumsi bahwa file temp ada di direktori home. Perhatikan bahwa spasi dan bukan koma memisahkan argumen.

Sekarang, dalam sintaks fungsi main(), argc adalah jumlah argumen untuk program, ditambah 1. Dalam hal ini, ada 5 argumen untuk program. Jadi, argc adalah 6. Dalam sintaks, argv[argc] adalah array pointer ke string. Nilai pertama untuk array ini di argv[0] diberikan oleh compiler. Ini adalah penunjuk ke nama file program. Nilai lainnya adalah pointer ke argumen program dalam urutan pengguna yang diketik. Ukuran array ini adalah argc. Dalam hal ini ukurannya adalah 1 + 5 = 6.

Asumsikan bahwa pada saat kompilasi, program berikut ini bernama temp:

#termasuk
menggunakan ruang namajam;

ke dalamutama(ke dalamargc,arang**argv)
{

biaya <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<akhir;

kembali 0;
}

Perhatikan di sini, bahwa array 'char *argv[argc]', telah dideklarasikan sebagai 'char** argv'.

Jika program ini dijalankan dengan perintah terminal,

./artikel temporer3pena buku'rumah besar'

maka outputnya akan menjadi:

./suhu, artikel,3, buku, pena, rumah besar

Perhatikan bahwa jalur direktori telah disertakan dengan nama file yang dapat dieksekusi.

Juga, perhatikan bahwa dalam menjalankan program (pemanggilan program), nilai untuk argc belum dikirim.

Kesimpulan

Kelas iostream memiliki empat objek penting yaitu cout, cin, cerr, dan clog. cin adalah objek input, sedangkan sisanya adalah objek output. Saat program sedang berjalan, input ke program berbeda dengan saat program mulai berjalan. Ketika sebuah program mulai berjalan, input ke program digabungkan dengan perintah untuk menjalankan program, dipisahkan oleh spasi.