Menguruskan Konsol dengan Kelas iostream di C ++

Managing Console With Iostream Classes C



Dalam pengkomputeran, konsol adalah papan kekunci komputer dan monitor komputer. Pada masa lalu, output dihantar terus ke layar monitor dan bukan ke tetingkap yang dipaparkan pada monitor. Bagi pengguna komputer biasa, aplikasi hari ini tidak menggunakan monitor secara eksplisit. Aplikasi ini menggunakan tingkap yang dipaparkan di monitor. Walau bagaimanapun, pengaturcara komputer masih perlu menggunakan skrin monitor. Walaupun pengaturcara masih perlu menggunakan layar monitor, sistem operasi tidak membenarkannya melakukan itu. Sistem operasi menyediakan tetingkap yang mensimulasikan layar monitor. Dalam Sistem Operasi Windows, tetingkap ini disebut Command Prompt. Dalam Sistem Operasi Linux dan variannya, tetingkap ini disebut terminal.

Diharapkan pembaca sudah mengetahui cara menggunakan Command Prompt atau Terminal. Artikel ini menerangkan cara membaca watak dan rentetan dari papan kekunci dan menghantar watak dan rentetan ke terminal (atau command prompt). Setiap pengaturcara C ++ perlu mengetahui dalam artikel ini.







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



#sertakan
menggunakan ruang namaJam;

Kandungan Artikel

Objek Aliran Sempit dari iostream Standard

Kelas iostream, objek standard, cout, cin, cerr, dan clog, telah dibuat dan sudah ada di perpustakaan standard. Pengaturcara hanya menggunakannya tanpa memberi contoh lagi.



kos

Pernyataan berikut dalam fungsi utama () menghantar teks, Ini adalah output. ke terminal:





kos << 'Ini adalah output.';

cout adalah objek iostream output di perpustakaan standard, yang sudah dibuat.<< 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, arahan arahan yang dipaparkan semula muncul di sebelah kanan frasa output. Ia tidak menuju ke baris seterusnya. endl pada akhir pernyataan berikut akan memaksa apa sahaja yang dicetak oleh skrin ke baris seterusnya:



kos << 'Ini adalah output.' <<endl;

endl adalah pemboleh ubah yang telah ditentukan. Kandungan skrin juga boleh dipaksa ke baris berikutnya dengan:

kos << 'Ini adalah output.' << ' n';

Dengan penggunaan ‘ n’, semua baris teks mungkin masih tidak langsung muncul di layar. endl mengalirkan baris teks yang lengkap ke skrin.

Catatan: tali yang dihantar ke cout berada dalam tanda kutip ganda, sementara watak yang dikirimkan dalam tanda petik tunggal. Satu siri rentetan dan huruf boleh dihantar 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 standard, sudah disusun, dan tersedia di perpustakaan standard. Pertimbangkan segmen kod berikut dalam fungsi utama ():

chartxt[lima puluh];
kos << 'Masukkan perkataan dan tekan Enter:' txt;
kos <<txt<<endl;

Pernyataan pertama menyatakan susunan kosong 50 aksara. Pernyataan kedua memerintahkan pengguna untuk memasukkan kata pada baris skrin seterusnya dan tekan kekunci Enter. Perhatikan penggunaan 'endl' yang memaksa pengguna memasukkan teks di baris seterusnya pada skrin. Ketika pengguna mengetik teks, teks yang dimasukkan digema ke layar ketika masuk ke objek cin. Setelah menekan Enter, pernyataan ketiga dalam segmen kod dijalankan. Pernyataan ketiga ini menghantar teks yang dimasukkan ke pemboleh ubah, txt. Teks yang dimasukkan tidak boleh melebihi 50 aksara dalam kes ini. Perhatikan penggunaan pengendali pengekstrakan, >>. Pernyataan terakhir memaparkan teks yang dimasukkan di skrin.

cin boleh mengambil lebih dari satu perkataan dari papan kekunci, dipisahkan dengan spasi. Kata-kata ini harus diekstrak ke dalam pemboleh ubah yang berbeza. Segmen kod berikut menggambarkan ini:

chartxt[dua puluh];
intia;
terapungkaki;
kos << 'Masukkan 3 nilai dan tekan Enter:' txt>>ia>>kaki;
kos <<txt<< '' <<ia<< '' <<kaki<<endl;

Perhatikan pernyataannya:

gin >>txt>>ia>>kaki;

Kata pertama diekstrak ke txt, di sebelahnya, dan yang terakhir ke kaki. Sekiranya inputnya,

satu25 3.6

maka output oleh segmen kod akan menjadi,

satu25 3.6

cerr

Program berikut mempunyai ralat:

#sertakan
menggunakan ruang namaJam;

intutama()
{
di myInt;

kembali 0;
}

Pernyataan pertama dalam utama () tidak betul. Sekiranya nama fail yang memiliki kod adalah temp.cc dan file yang dapat dieksekusi yang dihasilkan disebut temp, maka perintah g ++ berikut akan mengirim pesan kesalahan pengompil ke file, error.txt:

g++ -o temp suhu.DC 2>kesilapan.txt

Sekiranya fail error.txt tidak ada, ia akan dibuat. Perhatikan bahagian 2> error.txt arahan g ++.

Layar adalah tujuan output standard, dan juga merupakan tujuan kesalahan standard. Sekiranya 2> error.txt dihilangkan dari perintah g ++, maka mesej ralat penyusun akan dihantar ke tujuan ralat standard, yang masih merupakan layar (monitor).

Objek aliran yang mewakili tujuan output standard adalah cout. Objek aliran yang mewakili tujuan ralat standard adalah cerr. Kesalahan runtime program dapat dikirim ke layar seperti berikut:

cerr << 'Mesej ralat!' << ' n';

tersumbat

Aplikasi memerlukan input yang berbeza pada masa yang berlainan. Semua input dapat ditampilkan kembali di layar. Semua input dapat disimpan dalam fail. Ini adalah pembalakan. Tujuan pembalakan standard adalah skrin. Objek aliran log standard adalah tersumbat. Kod berikut akan memaparkan kembali teks input ke layar:

chartxt[lima puluh];
kos<<'Masukkan teks dan tekan Enter:'txt;
tersumbat<<txt<<endl;

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

Dalam praktiknya, pembalakan biasanya diarahkan ke fail. Program berikut menggambarkan ini:

#sertakan
menggunakan ruang namaJam;

intutama()
{
buka semula( 'log.txt','dalam',stdout);

kos << 'input_text' <<endl;
}

Perhatikan penggunaan fungsi, freopen (), dan argumennya. Argumen pertamanya adalah nama fail log. Sekiranya fail tidak ada, ia akan dibuat. Hujah kedua adalah 'w' untuk 'menulis'. Hujah ketiga adalah kuat untuk output standard. Pernyataan kedua dalam fungsi utama () menggunakan cout untuk menghantar teks log ke fail. Catatan: Kod input sebenar belum ditunjukkan dalam program ini.

Memperoleh Watak dan Rentetan dari Papan Kekunci

Ketika pengguna mengetik input, karakter dikirim ke buffer stream input dan ditampilkan di layar. Apabila pengguna menekan kekunci Enter, semua watak berada dalam penyangga; juga, kursor menuju ke permulaan baris seterusnya di bawah, di skrin. Program kemudian diteruskan ke pernyataan program seterusnya, setelah penyataan bacaan input.

Objek cin mempunyai kaedah, yang berkaitan dengan bahagian ini.

Membaca Perwatakan Pertama

dapatkan (char_type & c):
Segmen kod berikut menunjukkan cara membaca watak pertama, dari penyangga aliran input:

charch;
kos << 'Teks input:' <<endl;
gin.dapatkan(ch);
kos <<ch<<endl;

Pernyataan pertama menyatakan watak tanpa tugasan. Pernyataan kedua menyuruh pengguna memasukkan watak. Apabila pengguna mengetik watak dan menekan kekunci Enter, pernyataan ketiga menyalin watak dari penyangga aliran input ke dalam pemboleh ubah, ch.

Walaupun pengguna menaip lebih daripada satu watak, watak pertama akan diambil oleh segmen kod.

dapatkan ():
dapatkan () tanpa argumen, mengembalikan kod ASCII perpuluhan. Pertimbangkan segmen kod berikut:

kos << 'Teks input:' <<endl;
kos << gin.dapatkan() <<endl;

Sekiranya input adalah 'asdfg', maka 97 akan dikembalikan, yang merupakan kod ASCII perpuluhan untuk 'a'.

dapatkan (char_type * s, streamsize n)

Setelah pengguna memasukkan frasa dan menekan kekunci Enter, sebilangan watak yang bermula dari yang pertama, dapat diekstrak dari buffer aliran cin. Kod berikut boleh digunakan:

charhlm[10];
kos << 'Teks input:' <<endl;
gin.dapatkan(str,10);
kos <<hlm<<endl;

Sekiranya inputnya adalah 'orang hebat', maka outputnya akan menjadi 'hebat orang', terdiri daripada 9 aksara dan bukan 10. Aksara rentetan NUL ( 0) mengambil kedudukan kesepuluh dalam argumen get. Jadi, untuk mempunyai 9 aksara str, ukuran storannya harus sekurang-kurangnya 10, dan argumen get () harus 11. Sekiranya keseluruhan baris input diinginkan, maka nombor storan rentetan mestilah sekurang-kurangnya bilangannya watak yang ditaip, ditambah 1. Oleh itu, jika 12 aksara ditaip untuk keseluruhan baris, maka bilangannya harus 13 untuk ukuran penyimpanan string (str) dan 13 untuk argumen get (). Perhatikan bahawa satu ruang dikira sebagai satu watak.

dapatkan (char_type * s, streamsize n, char_type delim)
Adalah mungkin untuk mengekstrak sub-string, yang dibatasi di sebelah kanan, oleh kejadian pertama watak tertentu, atau oleh streamsize sub-string, yang pernah menjadi yang pertama. Sekiranya teks input ke kod berikut adalah orang yang hebat, maka yang hebat akan diekstrak:

charhlm[30];
kos << 'Teks input:' <<endl;
gin.dapatkan(str,6,'atau');
kos <<hlm<<endl;

Kedudukan keenam dari awal adalah watak ruang, dan ia membatasi substring yang diekstrak secara eksklusif. Kedudukan keenam mendahului sebelum satu-satunya watak, 'o'. Perhatikan bahawa saiz penyimpanan untuk str boleh setinggi mungkin.

Sekiranya teks input ke kod berikut adalah orang yang hebat, maka gr akan diekstrak:

charhlm[30];
kos << 'Teks input:' <<endl;
gin.dapatkan(str,10,'Dan');
kos <<hlm<<endl;

Kejadian pertama 'e', ​​datang pertama sebelum kedudukan kesepuluh.

Mendapatkan Semua Karakter Garisan

Setelah menekan kekunci Enter, semua karakter yang diketik ke dalam baris, dapat diperoleh seperti yang ditunjukkan dalam kod berikut:

kos << 'Teks input:' <<endl;
sementara (1) {
charch= (char)gin.dapatkan();
kos <<ch;
sekiranya (ch== ' n')
rehat;
}

Casting dengan (char), menukar setiap nombor perpuluhan menjadi watak ASCII yang sesuai.

mengintip ()

Fungsi anggota get () tidak hanya membaca watak seterusnya; mereka mengeluarkannya dari penyangga aliran. Walau bagaimanapun, fungsi anggota peek () mudah membaca watak seterusnya (bermula dari yang pertama) tanpa mengeluarkannya dari penyangga. Dalam kod berikut, setiap watak dibaca terlebih dahulu dengan fungsi mengintip () sebelum dikeluarkan, dengan fungsi get (). Semua itu berlaku setelah pengguna menekan kekunci Enter:

kos << 'Teks input:' <<endl;
sementara (1) {
charch= (char)gin.mengintip();
kos <<ch;
gin.dapatkan();
sekiranya (ch== ' n')
rehat;
}

Sekiranya watak-watak seterusnya tidak dikeluarkan oleh get (), mengintip () hanya akan membaca watak pertama, dan gelung akan berulang selama-lamanya.

Memaparkan dan Menghapus Karakter sebelum menekan Enter

Perhatikan bahawa dengan objek cin, tombol Enter harus ditekan sebelum ada tindakan. Baiklah, watak-watak boleh ditampilkan semasa ditaip dan dihapus sebelum menekan butang Enter. Namun, itu bermaksud menghubungkan dengan sistem operasi. Sistem operasi berbeza. Jadi ini bermaksud pengekodan yang berbeza untuk sistem operasi yang berbeza. Oleh itu, topik ini memerlukan tutorial yang berbeza - lihat kemudian.

Menghantar Karakter dan Rentetan ke Monitor

Objek cout adalah objek aliran output, yang sudah ada dan terdapat di perpustakaan standard C ++. cout adalah objek utama yang digunakan dalam menghantar watak dan rentetan ke monitor. Ini dilakukan dengan pengendali 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.

Ungkapan yang menghasilkan skalar boleh menjadi hujah bagi operator penyisipan. Operator menukar skalar menjadi teks dan meletakkan teks dalam aliran objek cout. Ketika teks dikirim ke objek cout, biasanya muncul di layar (monitor). Namun, kadang-kadang, ia mungkin tidak segera muncul. Untuk memaksa teks ke skrin, masukkan nilai khas, akhir, setelah memasukkan teks. Ini akan menyebabkan teks dialihkan ke layar, dan garis baru akan ditambahkan. Catatan: ‘ n’ hanya menambah baris baru tetapi tidak melancarkan teks ke skrin.

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

#sertakan
menggunakan ruang namaJam;

intutama()
{
intia= 5;
terapungkaki= 63.5;
kos << 'Yang' <<ia<< 'barang berharga $' <<kaki<< 'AS.' <<endl;

kembali 0;
}

Keluarannya adalah:

The5barang berharga $63.5KAMI.

Program berikut menunjukkan bagaimana rentetan objek yang diciptakan dari kelas dicetak:

#sertakan
menggunakan ruang namaJam;

strukturSt{
charhlm[sebelas] = 'sesetengah perkataan';
}obj;

intutama()
{
kos <<objhlm << ' n';

kembali 0;
}

Hasilnya adalah 'beberapa perkataan'.

Hujah untuk Program C ++

Pelaksanaan program bermula dari fungsi utama (). Fungsi utama () sebenarnya mempunyai dua parameter pilihan. Sintaks fungsi utama () dengan parameter pilihan, adalah:

intutama(intberhujah,char *berhujah[berhujah])
{

kembali 0;
}

Anggap bahawa nama fail C ++ yang boleh dilaksanakan adalah temp. Andaikan bahawa argumen yang diperlukan oleh program dari persekitarannya (sistem operasi), yang ditaip oleh pengguna, adalah,

artikel3pen buku'rumah besar'

Terdapat 5 hujah di sini: artikel, 3, buku, pena, dan rumah besar

Setiap teks. Argumen bernombor untuk program adalah teks. Dengan kata lain, setiap argumen adalah rentetan. rumah besar dalam petikan kerana ia adalah frasa. Perintah terminal untuk menjalankan program ini adalah:

./artikel temp3pen buku'rumah besar'

Dengan andaian bahawa temp file ada di direktori home. Perhatikan bahawa ruang dan bukan koma memisahkan argumen.

Sekarang, dalam sintaks fungsi () utama, argc adalah jumlah argumen untuk program, ditambah 1. Dalam kes ini, terdapat 5 argumen untuk program tersebut. Jadi, argc adalah 6. Dalam sintaks, argv [argc] adalah susunan penunjuk kepada rentetan. Nilai pertama untuk array ini di argv [0] diberikan oleh penyusun. Ini adalah penunjuk kepada nama fail program. Nilai selebihnya adalah petunjuk kepada argumen program dalam urutan pengguna yang ditaip. Ukuran array ini adalah argc. Dalam kes ini ukurannya adalah 1 + 5 = 6.

Andaikan bahawa semasa penyusunan, program berikut dinamakan temp:

#sertakan
menggunakan ruang namaJam;

intutama(intberhujah,char**berhujah)
{

kos <<berhujah[0] << ',' <<berhujah[1] << ',' <<berhujah[2] << ',' <<berhujah[3] << ',' <<berhujah[4] << ',' <<berhujah[5] <<endl;

kembali 0;
}

Perhatikan di sini, bahawa array 'char * argv [argc]', telah dinyatakan sebagai 'char ** argv'.

Sekiranya program ini dijalankan dengan perintah terminal,

./artikel temp3pen buku'rumah besar'

maka outputnya adalah:

./temp, artikel,3, buku, pen, rumah besar

Perhatikan bahawa jalan direktori telah disertakan dengan nama fail yang dapat dilaksanakan.

Juga, perhatikan bahawa dalam menjalankan program (panggilan program), nilai untuk argc belum dihantar.

Kesimpulannya

Kelas iostream mempunyai empat objek penting iaitu cout, cin, cerr, dan clog. cin adalah objek input, sementara selebihnya adalah objek output. Semasa program sedang berjalan, input ke program berbeda dari ketika program akan mulai berjalan. Ketika program mulai berjalan, input ke program digabungkan dengan perintah untuk menjalankan program, dipisahkan dengan spasi.