C ++ Tutorial: Pelajari Tentang Input dan Output

01

dari 08

Cara Baru untuk Keluaran

Kode program
traffic_analyzer / Getty Images

C ++ mempertahankan kompatibilitas mundur yang sangat tinggi dengan C, jadi dapat dimasukkan untuk memberi Anda akses ke printf () fungsi untuk output. Namun, I / O yang disediakan oleh C ++ secara signifikan lebih kuat dan yang lebih penting adalah tipe aman. Anda masih bisa menggunakan scanf () untuk input tetapi fitur keamanan tipe yang disediakan C ++ berarti aplikasi Anda akan lebih kuat jika Anda menggunakan C ++.

Dalam pelajaran sebelumnya, ini disentuh dengan contoh yang menggunakan cout. Di sini kita akan membahas sedikit lebih dalam dimulai dengan output pertama karena cenderung lebih banyak digunakan daripada input.

Kelas iostream menyediakan akses ke objek dan metode yang Anda butuhkan untuk output dan input. Pikirkan tentang i / o dalam hal aliran byte - baik dari aplikasi Anda ke file, layar atau printer - yang merupakan output, atau dari keyboard - yang merupakan input.

Output dengan Cout

Jika Anda tahu C, Anda mungkin tahu itu

instagram viewer
<< digunakan untuk menggeser bit ke kiri. Misal 3 << 3 adalah 24. Misalnya shift kiri menggandakan nilai sehingga 3 shift kiri mengalikannya dengan 8.

Dalam C ++, << telah kelebihan beban di kelas ostream sehingga int, mengapung, dan tipe string (dan variannya - misalnya ganda) semuanya didukung. Ini adalah bagaimana Anda melakukan output teks, dengan merangkai beberapa item di antara <<.>


cout << "Some Text" << intvalue << floatdouble << endl; 

Sintaks aneh ini dimungkinkan karena masing - masing << sebenarnya adalah panggilan fungsi yang mengembalikan a referensi ke ostream obyek. Jadi garis seperti di atas sebenarnya seperti ini


cout. << ("some text"). cout. << (intvalue) .cout. << (floatdouble) .cout. << (endl); 

C fungsiprintf dapat memformat output menggunakan Format Specifiers seperti% d. Dalam C ++ cout juga dapat memformat output tetapi menggunakan cara yang berbeda untuk melakukannya.

02

dari 08

Menggunakan Cout untuk Memformat Output

Objek cout adalah anggota iostream Perpustakaan. Ingat bahwa ini harus disertakan dengan a


#termasuk 

Perpustakaan ini iostream berasal dari ostream (untuk output) dan istream untuk input.

Memformat output teks dilakukan dengan memasukkan manipulator ke aliran output.

Apa itu Manipulator?

Ini adalah fungsi yang dapat mengubah karakteristik aliran output (dan input). Di halaman sebelumnya kita melihat itu << adalah fungsi kelebihan beban yang mengembalikan referensi ke objek panggilan mis. cout untuk output atau cin untuk input. Semua manipulator melakukan ini sehingga Anda dapat memasukkan mereka ke dalam output << atau input >>. Kami akan melihat input dan >> nanti dalam pelajaran ini.


hitung << endl; 

endl adalah manipulator yang mengakhiri baris (dan memulai yang baru). Ini adalah fungsi yang juga bisa disebut dengan cara ini.


endl (cout); 

Meskipun dalam praktiknya Anda tidak akan melakukan itu. Anda menggunakannya seperti ini.


cout << "Some Text" << endl << endl; // Dua baris kosong. 

File Hanya Streaming

Sesuatu yang perlu diingat bahwa dengan banyak perkembangan hari ini sedang dilakukan GUI aplikasi, mengapa Anda membutuhkan fungsi I / O teks? Bukan hanya untuk menghibur aplikasi? Yah Anda mungkin akan melakukan file I / O dan Anda dapat menggunakannya di sana juga tetapi apa output ke layar biasanya perlu diformat juga. Streaming adalah cara yang sangat fleksibel untuk menangani input dan output dan dapat bekerja dengannya

  • Teks I / O. Seperti pada aplikasi konsol.
  • String. Berguna untuk memformat.
  • File I / O.

Manipulator Lagi

Meskipun kami telah menggunakan ostream kelas, itu adalah kelas turunan dari ios kelas yang berasal dari ios_base. Kelas leluhur ini mendefinisikan masyarakat fungsi yang merupakan manipulator.

03

dari 08

Daftar Manipulator Cout

Manipulator dapat didefinisikan dalam aliran input atau output. Ini adalah objek yang mengembalikan referensi ke objek dan ditempatkan di antara pasangan <<. Sebagian besar manipulator dideklarasikan pada tapi endl, berakhir dan menyiram berasal dari . Beberapa manipulator mengambil satu parameter dan ini berasal .

Berikut daftar yang lebih detail.

Dari

  • endl - Mengakhiri saluran dan memanggil flush.
  • berakhir - Sisipan '\ 0' ( BATAL) ke dalam aliran.
  • flush - Memaksa buffer untuk segera di-output.

Dari . Sebagian besar dinyatakan dalam leluhur dari . Saya sudah mengelompokkannya berdasarkan fungsi dan bukan berdasarkan abjad.

  • boolalpha - Masukkan atau ekstrak objek bool sebagai "benar" atau "salah".
  • noboolalpha - Masukkan atau ekstrak objek bool sebagai nilai numerik.
  • fixed - Masukkan nilai titik apung dalam format tetap.
  • scientific - Masukkan nilai floating-point dalam format ilmiah.
  • internal - Internal-justify.
  • kiri - Kiri-dibenarkan.
  • benar - Benar-benar.
  • dec - Masukkan atau ekstrak nilai integer dalam format desimal.
  • hex - Masukkan atau ekstrak nilai integer dalam format hexadecimal (base 16).
  • oct - Memasukkan atau mengekstrak nilai dalam format oktal (basis 8).
  • noshowbase - Jangan awali nilai dengan basisnya.
  • showbase - Nilai awalan dengan basisnya.
  • noshowpoint - Jangan tampilkan titik desimal jika tidak perlu.
  • showpoint - Selalu tampilkan titik desimal saat memasukkan nilai floating-point.
  • noshowpos - Jangan masukkan tanda plus (+) jika angka> = 0.
  • showpos - Jangan masukkan tanda plus (+) jika angka> = 0.
  • noskipws - Jangan melewatkan ruang putih awal saat mengekstraksi.
  • skipws - Abaikan ruang putih awal pada ekstraksi.
  • nouppercase - Jangan mengganti huruf kecil dengan huruf besar setara.
  • huruf besar - Ganti huruf kecil dengan padanan huruf besar.
  • unitbuf - Siram penyangga setelah dimasukkan.
  • nounitbuf - Jangan menyiram buffer setelah setiap sisipan.

04

dari 08

Contohnya Menggunakan Cout

// ex2_2cpp. #sertakan "stdafx.h" #termasukmenggunakan namespace std; int main (int argc, char * argv []) { cout.width (10); cout << benar << "Uji" << endl; cout << tersisa << "Tes 2" << endl; cout << internal << "Test 3" << endl; cout << endl; cout.precision (2); cout << 45.678 << endl; cout << huruf besar << "David" << endl; cout.precision (8); Cout << ilmiah << endl; cout << 450678762345.123 << endl; cout << diperbaiki << endl; cout << 450678762345.123 << endl; cout << showbase << endl; cout << showpos << endl; cout << hex << endl; cout << 1234 << endl; cout << okt 

Output dari ini di bawah ini, dengan satu atau dua spasi tambahan dihapus untuk kejelasan.

 Uji. Tes 2. Tes 3. 46. David. 4,50678762E + 011. 450678762345.12299000. 0X4D2. 02322. +1234. 4d2. 2322. 1234. 

Catatan: Meskipun huruf besar, David dicetak sebagai David dan bukan DAVID. Ini karena huruf besar hanya memengaruhi keluaran yang dihasilkan- mis. nomor dicetak heksadesimal. Jadi output hex 4d2 adalah 4D2 ketika huruf besar sedang beroperasi.

Juga, sebagian besar manipulator ini sebenarnya mengatur sedikit di bendera dan dimungkinkan untuk mengatur ini secara langsung

 cout.setf () 

dan jelas dengan

 cout.unsetf () 

05

dari 08

Menggunakan Setf dan Unsetf untuk Memanipulasi Format I / O

Fungsinya setf punya dua kelebihan beban versi yang ditunjukkan di bawah ini. Sementara tidak disetel hanya menghapus bit yang ditentukan.

 setf (flagvalues); setf (nilai flag, nilai mask); unsetf (flagvalues); 

Bendera variabel diturunkan oleh ORing bersama semua bit yang Anda inginkan dengan |. Jadi kalau mau ilmiah, huruf besar dan boolalpha lalu gunakan ini. Hanya bit yang dilewatkan sebagai parameter diatur. Bit lainnya dibiarkan tidak berubah.

 cout.setf (ios_base:: ilmiah | ios_base:: huruf besar | ios_base:: boolalpha); cout << hex << endl; cout << 1234 << endl; cout << dec << endl; cout << 123400003744.98765 << endl; nilai bool = true; Cout << nilai << endl; cout.unsetf (ios_base:: boolalpha); Cout << nilai << endl; 

Menghasilkan

 4D2. 1.234000E + 011. benar. 1. 

Masking Bits

Keduanya parameter versi setf menggunakan topeng. Jika bit diatur dalam parameter pertama dan kedua maka akan ditetapkan. Jika bit hanya pada parameter kedua maka itu akan dihapus. Nilai bidang penyesuaian, bidang dasar dan lapangan mengapung (tercantum di bawah) adalah bendera komposit, yaitu beberapa bendera Atau lebih bersama. Untuk basefield dengan nilai-nilai 0x0e00 sama dengan Desember | oktober | hex. Begitu

 setf (ios_base:: hex, ios_basefield); 

membersihkan ketiga flag lalu set hex. Demikian pula bidang penyesuaian adalah kiri | benar | intern dan lapangan mengapung adalah ilmiah | tetap.

Daftar Bit

Daftar enum ini diambil dari Microsoft Visual C ++ 6.0. Nilai aktual yang digunakan adalah arbitrer - kompiler lain dapat menggunakan nilai yang berbeda.

 skipws = 0x0001. unitbuf = 0x0002. huruf besar = 0x0004. showbase = 0x0008. showpoint = 0x0010. showpos = 0x0020. kiri = 0x0040. kanan = 0x0080. internal = 0x0100. dec = 0x0200. Oktober = 0x0400. hex = 0x0800. ilmiah = 0x1000. tetap = 0x2000. boolalpha = 0x4000. bidang penyesuaian = 0x01c0. basefield = 0x0e00, floatfield = 0x3000. _Fmtmask = 0x7fff, _Fmtzero = 0. 

06

dari 08

Tentang Clog dan Cerr

Suka Cout, menyumbat dan cerr adalah objek yang didefinisikan sebelumnya didefinisikan dalam ostream. Kelas iostream mewarisi dari keduanya ostream dan istream jadi itu sebabnya Cout contoh bisa digunakan iostream.

Buffered dan Unbuffered

  • Buffered - Semua output disimpan sementara di a penyangga dan kemudian dibuang ke layar dalam sekali jalan. Baik cout dan clog disangga.
  • Unbuffered- Semua output langsung menuju ke perangkat output. Contoh dari objek yang tidak dibangun adalah cerr.

Contoh di bawah ini menunjukkan bahwa cerr digunakan dengan cara yang sama seperti cout.


#termasuk menggunakan namespace std; int _tmain (int argc, _TCHAR * argv []) {cerr.width (15); cerr.right; cerr << "Kesalahan" << endl; return 0; }

Masalah utama dengan buffering, adalah jika program macet maka konten buffer hilang dan lebih sulit untuk melihat mengapa macet. Keluaran unbuffered langsung jadi percikan beberapa baris seperti ini melalui kode mungkin berguna.

 cerr << "Memasuki zappit fungsi Berbahaya" << endl; 

Masalah Penebangan

Membuat log peristiwa program dapat menjadi cara yang berguna untuk menemukan bug yang sulit - jenis yang hanya terjadi sekarang dan kemudian. Jika acara itu macet, Anda memiliki masalah - apakah Anda membuang log ke disk setelah setiap panggilan sehingga Anda dapat melihat acara langsung ke crash atau menyimpannya di buffer dan secara berkala flush buffer dan berharap Anda tidak kehilangan terlalu banyak ketika crash terjadi?

07

dari 08

Menggunakan Cin untuk Input: Input Terformat

Ada dua jenis input.

  • Diformat. Input input sebagai angka atau tipe tertentu.
  • Tidak diformat. Membaca byte atau string. Ini memberikan kontrol yang jauh lebih besar terhadap aliran input.

Berikut adalah contoh sederhana dari input yang diformat.

 // excin_1.cpp: Menentukan titik masuk untuk aplikasi konsol. #include "stdafx.h" // Hanya Microsoft. #termasuk menggunakan namespace std; int main (int argc, char * argv []) { int a = 0; float b = 0,0; int c = 0; cout << "Silakan Masukkan int, float, dan int dipisahkan dengan spasi" <> a >> b >> c; cout << "Anda memasukkan" << a << "" << b << "" << c << endl; return 0; }

Ini menggunakan cin untuk membaca tiga angka (int, mengapung, int) dipisahkan oleh spasi. Anda harus menekan enter setelah mengetik nomor.

3 7.2 3 akan menampilkan "Anda memasukkan 3 7.2 3".

Input yang diformat memiliki Keterbatasan!

Jika Anda memasukkan 3.76 5 8, Anda mendapatkan "Anda memasukkan 3 0.76 5", semua nilai lain pada baris itu hilang. Itu berperilaku dengan benar, sebagai. bukan bagian dari int dan jadi menandai awal float.

Terjebak Kesalahan

Objek cin menetapkan bit gagal jika input tidak berhasil dikonversi. Bit ini adalah bagian dari ios dan dapat dibaca dengan menggunakan gagal() berfungsi pada keduanya cin dan Cout seperti ini.

 if (cin.fail ()) // lakukan sesuatu. 

Tidak mengherankan, cout.fail () jarang diatur, setidaknya pada output layar. Dalam pelajaran selanjutnya pada file I / O, kita akan lihat caranya cout.fail () bisa menjadi kenyataan. Ada juga a baik() berfungsi untuk cin, Cout dll.

instagram story viewer