Bahasa C memiliki rutin-rutin untuk proses input/output yang dideklarasikan di header file stdio.h. proses input/output versi C ini masih dapat digunakan di C++. Namun demikian C++ mengenalkan teknik baru untuk proses input/output, yaitu yang dinamakan iostreams atau disingkat menjadi streams saja. Hampir semua fungsi yang terdapat di stdio.h dapat dikonversikan ke dalam bentuk streams. Kelebihan streams dibandingkan input/output C adalah fleksibilitasnya dalam melakukan format input/output dan juga kemampuannya yang mendukung konsep operator berbeban lebih (overloaded operator).
Apa itu Streams ?
Streams adalah suatu abstraksi untuk menangani aliran data dari suatu sumber (producer) ke tujuan (consumer) lain. Baik sumber atau tujuan dapat berupa buffer di memori, string, file atau layar monitor. C++ mendeklarasikan kelas untuk strem di beberapa header file, yaitu;
* iostream.h (I/O umum)
* constrea.h (I/O ke console)
* strstrea.h (I/O ke string)
* fstream.h (I/O ke file)
Format pada Output dengan fungsi
Stream output dapat diformat seperti halnya output pada fungsi printf. Untuk mengubah format output, yang harus dilakukan adalah mengubah beberapa bit flag yang ada di kelas ios. Ada beberapa macam flag yang terdapat di kelas ios yaitu :
Daftar Format Pada Output
skipws Mengabaikan karakter spasi putih (white space) pada saat proses input
left Mengatur output menjadi rata kiri
right Mengatur output menjadi rata kanan
internal Output disisipi karakter pengisi (padding character) setelah tanda positif atau tanda basis bilangan
dec Menampilkan bilangan dalam basis desimal
oct Manampilkan bilangan dalam basis oktal
hex Manampilkan bilangan dalam basis heksadesimal
showbase Menampilkan basis bilangan saat suatu bilangan ditampilkan (untuk heksadesimal dengan tambahan “0x” dan untuk oktal dengan tambahan “O”)
showpoint Menunjukan tanda titik pada output bilangan real
uppercase Membuat output bilangan heksadesimal menjadi huruf kapital
showpos Menunjukan tanda ‘+’ pada output bila suatu bilangan lebih dari 0
scientific Menggunakan cara penulisan eksponensial untuk bilangan real (format : xxxE()xxx)
fixed Menggunakan format bilangan desimal untuk bilangan real
unitbuf Mengosongkan semua stream
stdio Mencegah masalah yang bisa terjadi bila digunakan stream dan stdio secara bersamaan
Sekilas tentang Flag
Flag merupakan sekumpulan bit-bit yang masing-masing bit melambangkan keadaan tertentu. Contoh yang paling sederhana adalah flag 1 bit yang hanya melambangkan keadaan nyala (“1”) atau padam (“0”).
Format Output yang lain
format pada output dengan fungsi-fungsi yang sering digunakan antara lain :
- int width (int) : fungsi ini digunakan untuk mengubah lebar output yang akan ditampilkan
- char fill (char) : fungsi ini digunakan untuk mengubah karakter pengisi (padding charakter). Karakter pengisi adalah salah satu karakter ASCII yang dituliskan bila output yang diformat lebih besar daripada lebar yang ditentukan dengan fungsi width
- int precision (int) : fungsi ini digunakan untuk mengubah derajat ketelitian bilangan real (floating point) yang akan ditampilkan
Output pada String
Ada beberapa format yang dapat dilakukan pada string dengan fasilitas stream, yaitu :
· Lebar output dapat diubah dengan memanggil fungsi width diikuti argumen lebar yang dikehendaki.
· Alignment (rata kiri atau rata kanan) dapat diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::left atau ios::right.
· Karakter pengisi (padding character) dapat diubah dengan memanggil fungsi fill diikuti argumen karakter yang akan digunakan sebagai karakter pengisi.
Output pada Bilangan Bulat
Yang dimaksud bilangan bulat disini adalah tipe short int, int, unsigned int, long, unsigned long. Ada beberapa format yang dapat dilakukan pada bilangan bulat dengan fasilitas stream, yaitu :
· Basis bilangan bulat (desimal, heksadesimal atau oktal) dapat diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::dec, ios::hex atau ios::oct.
· Lebar output yang diformat dapat diubah dengan memanggil fungsi width diikuti argumen lebar yang dikehendaki.
· Alignment (rata kiri atau rata kanan) dapat diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::left atau ios::right.
· Karakter pengisi (padding character) dapat diubah dengan memanggil fungsi fill diikuti argumen karakter yang akan digunakan sebagai karakter pengisi.
· Tampilan tanda ‘+’, diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::showpos.
· Tampilan huruf (huruf kapital atau huruf kecil) pada bilangan heksadesimal, diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::uppercase.
Output pada Bilangan Real
Yang dimaksud bilangan real disini adalah tipe data float, double dan long double. Ada beberapa format yang dapat dilakukan pada bilangan real dengan fasilitas stream, yaitu :
· Derajat ketelitian (precision) dapat diubah dengan memanggil fungsi precision diikuti argumen jumlah ketelitian angka yang diinginkan.
· Lebar output dapat diubah dengan memanggil fungsi width diikuti argumen lebar yang dikehendaki.
· Format bilangan real (fixed atau scientific) dapat diubah dengan memanggil fungsi setf diikuti argumen ios::fixed atau ios::scientific.
· Alignment (rata kiri atau rata kanan) dapat diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::left atau ios::right.
· Karakter pengisi (padding character) dapat diubah dengan memanggil fungsi fill diikuti argumen karakter yang akan digunakan sebagai karakter pengisi.
· Tampilan tanda ‘+’, diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::showpos.
· Tampilan tanda ‘.’ Bila terdapat angka dibelakang koma, diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::showpoint.
Daftar manipulator untuk I/O ke console
clreol
Menghapus sampai dengan akhir baris dari jendela teks
delline
Menghapus satu baris di jendela teks
highvideo
Memilih karakter dengan intensitas terang
insline
Menyisipkan satu baris kosong di jendela teks
lowvideo
Memilih karakter dengan intensitas rendah
normvideo
Memilih karakter dengan intensitas normal
setattr (int)
Memberi nilai atribut layar
setbk (int)
Memberi nilai warna latar belakang
setclr (int)
Memberi nilai warna karakter
setcrstype (int)
Mengubah bentuk kursor
setxy (int, int)
Menempatkan kursor di posisi tertentu