C ++

Menguruskan Konsol dengan Kelas iostream di C ++

Menguruskan Konsol dengan Kelas iostream di 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 tetingkap 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 nama std;

Kandungan Artikel

  • Objek Aliran Sempit dari iostream Standard
  • Memperoleh Watak dan Rentetan dari Papan Kekunci
  • Memaparkan dan Menghapus Karakter sebelum menekan Enter
  • Menghantar Karakter dan Rentetan ke Monitor
  • Hujah untuk Program C ++
  • Kesimpulannya

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.

cout

Pernyataan berikut dalam fungsi utama () mengirimkan teks, "Ini adalah output."Ke terminal:

cout << "This is 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:

cout << "This is output." << endl;

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

cout << "This is output." << '\n';

Dengan penggunaan '\ n', semua baris teks mungkin masih tidak langsung muncul di layar. "Endl" melancarkan 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 '\n' is not in the series.

cin

cin adalah objek input iostream standard, sudah disusun, dan tersedia di perpustakaan standard. Pertimbangkan segmen kod berikut dalam fungsi utama ():

char txt [50];
cout << "Enter a word and press Enter:" <> txt;
cout << 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:

char txt [20];
int itu;
apungan kaki;
cout << "Enter 3 values and press Enter:" <> txt >> itu >> kaki;
cout << txt << " << it << " << ft << endl;

Perhatikan pernyataannya:

cin >> txt >> it >> kaki;

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

satu 25 3.6

maka output oleh segmen kod akan,

satu 25 3.6

cerr

Program berikut mempunyai ralat:

#sertakan
menggunakan ruang nama std;
int utama ()

di myInt;
pulangan 0;

Pernyataan pertama dalam utama () tidak betul. Sekiranya nama fail yang mempunyai 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 temp.ralat cc 2>.txt

Sekiranya fail “ralat.txt "tidak ada, ia akan dibuat. Perhatikan ralat bahagian "2>.txt ”arahan g ++.

Layar adalah tujuan output standard, dan juga merupakan tujuan kesalahan standard. Sekiranya “2> ralat.txt ”dihilangkan dari perintah g ++, maka pesan kesalahan kompilator akan dikirim ke tujuan ralat standard, yang masih 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 << "The error message!" << '\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:

char txt [50];
cout<<"Enter text and press Enter:"<>txt;
tersumbat<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 nama std;
int utama ()

freopen ("log.txt "," w ", stdout);
cout << "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 pembalakan ke fail. Catatan: Kod input sebenar belum ditunjukkan dalam program ini.

Memperoleh Watak dan Rentetan dari Papan Kekunci

Semasa pengguna mengetik input, karakter dikirim ke buffer aliran 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 penyataan 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:

char ch;
cout << "Input text:" << endl;
cin.dapatkan (ch);
cout << ch << endl;

Pernyataan pertama menyatakan watak tanpa tugasan. Pernyataan kedua memberitahu 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:

cout << "Input text:" << endl;
cout << cin.get() << 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 aksara yang bermula dari yang pertama, dapat diekstrak dari penyangga aliran cin. Kod berikut boleh digunakan:

char str [10];
cout << "Input text:" << endl;
cin.dapatkan (str, 10);
cout << str << endl;

Sekiranya inputnya adalah "orang hebat", maka outputnya akan menjadi "orang hebat", terdiri daripada 9 aksara dan bukan 10. Aksara rentetan NUL (\ 0) mengambil kedudukan kesepuluh dalam argumen get. Oleh itu, untuk mempunyai 9 watak dalam str, ukuran storannya mestilah sekurang-kurangnya 10, dan argumen get () harus 11. Sekiranya keseluruhan baris input diinginkan, maka nombor simpanan rentetan mestilah sekurang-kurangnya bilangan aksara 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 aliran rentetan sub-string, yang pernah menjadi yang pertama. Sekiranya teks input ke kod berikut adalah "orang hebat", maka "hebat" akan diekstrak:

char str [30];
cout << "Input text:" << endl;
cin.dapatkan (str, 6, 'o');
cout << str << 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 hebat", maka "gr" akan diekstrak:

char str [30];
cout << "Input text:" << endl;
cin.dapatkan (str, 10, 'e');
cout << str << endl;

Kejadian pertama 'e', ​​didahulukan 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:

cout << "Input text:" << endl;
semasa (1)
char ch = (char) cin.dapatkan ();
cout << ch;
jika (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:

cout << "Input text:" << endl;
semasa (1)
char ch = (char) cin.mengintip ();
cout << ch;
cin.dapatkan ();
jika (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. Walau bagaimanapun, 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 '\n' or endl is encountered.

Ungkapan yang menghasilkan skalar boleh menjadi hujah bagi operator penyisipan. Operator menukar skalar menjadi teks dan meletakkan teks di 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 layar, masukkan nilai khas, "endl," setelah memasukkan teks. Ini akan menyebabkan teks dialihkan ke layar, dan garis baru akan ditambahkan. Nota: '\ n' hanya menambah baris baru tetapi tidak mengalihkan teks ke skrin.

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

#sertakan
menggunakan ruang nama std;
int utama ()

int itu = 5;
apungan ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
pulangan 0;

Keluarannya adalah:

5 item berharga $ 63.5 AS.

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

#sertakan
menggunakan ruang nama std;
struktur St
char str [11] = "beberapa perkataan";
obj;
int utama ()

cout << obj.str << '\n';
pulangan 0;

Keluarannya 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:

int utama (int argc, char * argv [argc])

pulangan 0;

Anggaplah 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,

artikel 3 pen buku "rumah besar"

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

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

./ artikel temp 3 pen 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 bilangan argumen untuk program, ditambah 1. Dalam kes ini, terdapat 5 argumen untuk program ini. Jadi, argc adalah 6. Dalam sintaksnya, argv [argc] adalah susunan penunjuk kepada rentetan. Nilai pertama bagi 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. Saiz array ini adalah argc. Dalam kes ini ukurannya adalah 1 + 5 = 6.

Andaikan bahawa semasa penyusunan, program berikut dinamakan temp:

#sertakan
menggunakan ruang nama std;
int utama (int argc, char ** argv)

cout << argv[0] << ", " << argv[1] << ", " << argv[2] << ", " << argv[3] << ", " << argv[4] << ", " << argv[5] << endl;
pulangan 0;

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

Sekiranya program ini dijalankan dengan perintah terminal,

./ artikel temp 3 pen buku "rumah besar"

maka outputnya adalah:

./ temp, artikel, 3, buku, pena, 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 saat program tersebut mulai dijalankan. Ketika program mulai berjalan, input ke program digabungkan dengan perintah untuk menjalankan program, dipisahkan dengan spasi.

Tutorial Battle for Wesnoth
The Battle for Wesnoth adalah salah satu permainan strategi sumber terbuka paling popular yang boleh anda mainkan pada masa ini. Bukan hanya permainan...
0 A.D. Tutorial
Daripada banyak permainan strategi di luar sana, 0 A.D. berjaya menonjol sebagai tajuk yang komprehensif dan permainan taktikal yang sangat mendalam w...
Tutorial Unity3D
Pengenalan Unity 3D Unity 3D adalah enjin pengembangan permainan yang kuat. Ini adalah platform silang yang memungkinkan anda membuat permainan untuk ...