Sampai sekarang, program-program contoh bagian sebelumnya yang diberikan sangat sedikit interaksi dengan pengguna, jika ada sama sekali. Menggunakan standard input dan output perpustakaan, kita akan dapat berinteraksi dengan pengguna dengan mencetak pesan pada layar dan pengguna mendapatkan masukan dari keyboard.
C + + menggunakan abstraksi yang nyaman disebut aliran untuk melakukan operasi input dan output dalam sekuensial media seperti layar atau keyboard. Sebuah stream adalah sebuah objek di mana sebuah program dapat menyisipkan atau karakter ekstrak ke / dari itu. Kita tidak benar-benar perlu peduli tentang banyak spesifikasi tentang media fisik yang terkait dengan sungai - kita hanya perlu tahu akan menerima atau memberikan karakter secara berurutan.
Standar C + + perpustakaan termasuk file header iostream, di mana standar input dan output stream objek dideklarasikan.
Standar Output (cout)
Secara default, output standar dari sebuah program adalah layar, dan C + + sungai objek didefinisikan untuk mengakses itu adalah pengadilan.
cout yang digunakan bersama dengan operator penyisipan, yang ditulis sebagai <<(dua "kurang dari").
1 cout << "Output kalimat"; / / prints Output kalimat di layar
2 cout <<120; / / prints nomor 120 di layar
3 cout <
operator << memasukkan data ke stream yang sebelumnya. Dalam contoh di atas itu memasukkan string Output konstan kalimat, angka konstan 120 dan variabel x ke standard output stream cout. Perhatikan bahwa kalimat dalam instruksi pertama tertutup antara tanda kutip ganda (“ “) karena merupakan karakter string konstan. Setiap kali kita ingin menggunakan karakter string konstan kita harus menyertakan mereka di antara tanda kutip ganda (“ ") sehingga mereka dapat dengan jelas dibedakan dari variabel nama. Sebagai contoh, kedua kalimat memiliki hasil yang sangat berbeda:
1 cout << "Halo"; / / prints Hello
2 cout <
Penyisipan operator (<<) dapat digunakan lebih dari sekali dalam satu pernyataan:
cout << "Halo," << "I am" << "a C + + pernyataan";
Pernyataan terakhir ini akan mencetak pesan Hello, I am a C + + pernyataan di layar. Kegunaan mengulangi penyisipan operator (<<) adalah menunjukkan ketika kita ingin mencetak kombinasi dari variabel dan konstanta atau lebih dari satu variabel:
cout << "Hello, I am" <
Jika kita mengasumsikan variabel usia berisi nilai 24 dan variabel pos berisi 90.064 output dari pernyataan sebelumnya akan menjadi:
Halo, saya 24 tahun dan saya adalah 90.064 kodepos
Penting untuk memperhatikan bahwa cout tidak menambahkan satu baris setelah output kecuali jika kita secara eksplisit menunjukkan hal itu, oleh karena itu, pernyataan berikut:
1 cout << "Ini adalah sebuah kalimat.";
2 cout << "Ini adalah kalimat yang lain.";
akan ditampilkan pada layar satu mengikuti garis lain tanpa istirahat di antara mereka:
Ini adalah sebuah kalimat. Ini adalah kalimat yang lain.
meskipun kita telah menuliskannya dalam dua cout yang berbeda. Dalam rangka untuk melakukan satu baris pada output kita harus secara eksplisit memasukkan karakter baris baru ke pengadilan. Dalam C + + sebuah karakter baris baru dapat ditetapkan sebagai \ n (backslash, n):
1 cout << "Pertama kalimat. \ n";
2 cout << "Kedua kalimat. \ nThird kalimat.";
Ini menghasilkan output sebagai berikut:
Kalimat pertama.
Kedua kalimat.
Kalimat ketiga.
Selain itu, untuk menambahkan baris baru, Anda dapat juga menggunakan manipulator endl. Contoh:
1 cout << "Pertama kalimat." <
akan mencetak:
kalimat pertama.
kalimat kedua.
Para manipulator endl menghasilkan karakter newline, persis seperti masuknya '\ n' tidak, tetapi juga memiliki perilaku tambahan bila digunakan dengan buffered stream. lagi pula, cout akan menjadi unbuffered stream dalam kebanyakan kasus, sehingga Anda dapat umumnya menggunakan baik \ n melarikan diri karakter dan manipulator endl dalam rangka untuk menentukan baris baru tanpa perbedaan dalam perilaku.
Standard Input (cin).
Perangkat input standar biasanya keyboard. Menangani standard input di C + + ini dilakukan dengan menerapkan operator overload ekstraksi (>>) pada cin stream. Operator harus diikuti oleh variabel yang akan menyimpan data yang akan diambil dari stream. Contoh:
1 int umur
2 cin>> umur;
Pernyataan pertama menyatakan tipe variabel int disebut umur, dan yang kedua menunggu input dari cin (keyboard) untuk menyimpannya dalam variabel integer ini.
cin hanya dapat memproses input dari keyboard sekali tombol RETURN telah ditekan. Oleh karena itu, bahkan jika Anda meminta satu karakter, ekstraksi dari cin tidak akan memproses input sampai user menekan RETURN setelah karakter telah diperkenalkan.
Anda harus selalu mempertimbangkan jenis variabel yang Anda gunakan sebagai wadah dengan cin ekstraksi. Jika Anda meminta sebuah integer Anda akan mendapatkan sebuah integer, jika Anda meminta karakter Anda akan mendapatkan karakter dan jika Anda meminta string karakter Anda akan mendapatkan sebuah string karakter.
1 / / I / o contoh
2
3 # include
4 using namespace std;
5
6 int main ()
7 (
8 int i;
9 cout << "Masukkan nilai integer:";
10 cin>> i;
11 cout << "Nilai yang Anda masukkan adalah" <12 cout << "dan 2 kalinhya adalah" <13 return 0;
14 )
Harap masukkan nilai integer: 702
Nilai yang Anda masukkan adalah 702 dan ganda adalah 1404.
Pengguna dari suatu program dapat menjadi salah satu faktor yang menghasilkan kesalahan bahkan dalam program-program sederhana yang menggunakan cin (seperti yang kita lihat). Karena jika Anda meminta nilai integer dan memperkenalkan sebuah nama pengguna (yang umumnya adalah string karakter), hasilnya dapat menyebabkan program Anda untuk misoperate karena tidak apa yang kami harapkan dari pengguna. Jadi bila Anda menggunakan input data yang diberikan oleh ekstraksi cin Anda harus percaya bahwa pengguna program Anda akan bersikap kooperatif dan bahwa dia tidak akan memperkenalkan namanya atau yang serupa ketika nilai integer diminta. Sedikit ke depan, ketika kita melihat kelas stringstream kita akan melihat kemungkinan solusi untuk kesalahan yang dapat disebabkan oleh jenis ini input pengguna.
Anda juga dapat menggunakan cin untuk meminta lebih dari satu datum input dari user:
cin>> a>> b;
adalah setara dengan:
1 cin>> a;
2 cin>> b;
Dalam kedua kasus, pengguna harus memberi dua data, satu untuk variabel a dan lainnya untuk variabel b yang mungkin dipisahkan oleh pemisah kosong yang valid: spasi, karakter tab atau baris baru.
cin dan string
Kita dapat menggunakan cin untuk mendapatkan ekstraksi string dengan operator (>>) seperti yang kita lakukan dengan variabel tipe data dasar:
cin>> mystring;
Namun, seperti telah dikatakan, cin ekstraksi segera berhenti membaca seakan-akan menemukan ruang kosong karakter apapun, sehingga dalam kasus ini kita akan bisa mendapatkan hanya satu kata untuk setiap ekstraksi. Perilaku ini mungkin atau mungkin tidak dapat apa yang kita inginkan, misalnya jika kita ingin mendapatkan sebuah kalimat dari pengguna, operasi ekstraksi ini tidak akan berguna.
Dalam rangka untuk mendapatkan seluruh baris, kita dapat menggunakan fungsi getline, yang merupakan cara yang lebih dianjurkan untuk mendapatkan input pengguna dengan cin:
1 / / Cin dengan rangkaian
2 # include
3 # include
4 using namespace std;
5
6 int main ()
7 (
8 mystr string;
9 cout << "Siapa nama Anda?";
10 getline (cin, mystr);
11 cout << "Halo" <
13 getline (cin, mystr);
14 cout << "Aku suka" <
16 )
What's your name? Juan Souli
Halo Juan Souli.
Apa tim favorit Anda? The Isotop
Aku suka The Isotop juga!
Perhatikan bagaimana dalam kedua panggilan untuk getline kita menggunakan string yang sama identifier (mystr). Apa program dilakukan dalam panggilan kedua adalah dengan mengganti konten sebelumnya dengan yang baru yang diperkenalkan.
stringstream
File header standar
1 string mystr ( "1204");
2 int Myint;
3 stringstream (mystr)>> Myint;
Ini menyatakan sebuah objek string dengan nilai "1204", dan sebuah objek int. Kemudian kita menggunakan stringstream's konstruktor untuk membangun sebuah objek dari jenis ini dari objek string. Karena kita dapat menggunakan benda-benda stringstream seolah-olah mereka sungai-sungai, kita dapat mengekstrak integer dari itu seperti yang kita akan dilakukan pada cin dengan menerapkan extractor operator (>>) itu diikuti oleh variabel bertipe int.
Setelah potongan kode ini, variabel Myint akan berisi nilai numerik 1204.
1/ / Stringstreams
2# include
3# include
4# include
5using namespace std;
6
7int main ()
8(
9 mystr string;
10 float harga = 0;
11 int jumlah = 0;
12
13 cout << "Enter price:";
14 getline (cin, mystr);
15 stringstream (mystr)>> harga;
16 cout << "Masukkan jumlah:";
17 getline (cin, mystr);
18 stringstream (mystr)>> kuantitas;
19 cout << "Total price:" <
21)
Masukkan harga: 22,25
Masukkan kuantitas: 7
Total harga: 155,75
Dalam contoh ini, kita mendapatkan nilai numerik dari input standar secara tidak langsung. Alih-alih nilai numerik untuk penggalian langsung dari input standar, kita mendapatkan baris dari input standar (cin) menjadi obyek string (mystr), dan kemudian kita mengekstrak nilai-nilai integer dari string ini ke dalam variabel bertipe int (kuantitas).
Menggunakan metode ini, bukan ekstraksi langsung dari nilai-nilai integer, kita memiliki lebih banyak kontrol terhadap apa yang terjadi dengan nilai numerik input dari user, karena kita memisahkan proses untuk mendapatkan masukan dari pengguna (sekarang kita hanya meminta baris) dengan penafsiran yang input. Oleh karena itu, metode ini biasanya lebih suka untuk mendapatkan nilai numerik dari pengguna dalam semua program yang intensif di input pengguna.
Manipulasi dari cin akan saya tambah pada post berikutnya
C + + juga menyediakan kelas-kelas berikut untuk melakukan output dan input karakter ke / dari file:
• ofstream: Stream kelas untuk menulis pada file
• ifstream: Stream kelas untuk membaca dari file
• fstream: Stream kelas untuk kedua membaca dan menulis dari / ke file.
Kelas-kelas ini diperoleh secara langsung atau tidak langsung dari kelas istream, dan ostream. Kita telah menggunakan kelas2 ini : cin adalah obyek kelas istream dan cout adalah obyek kelas ostream.
Mari kita lihat sebuah contoh:
1 / / dasar operasi file
2 # include
3 # include
4 using namespace std;
5
6 int main () (
7 ofstream myfile;
8 myfile.open ( "example.txt");
9 myfile << "Menulis ini ke file. \ n";
10 myfile.close ();
11 return 0;
12 ) [File example.txt]
13 Menulis ke file ini
Kode ini menciptakan sebuah file yang bernama example.txt dan menyisipkan kalimat ke dalamnya dengan cara yang sama yang biasa kami lakukan dengan cout, tetapi penggunaan file myfile stream sebagai gantinya.
Tapi mari kita lihat langkah demi langkah:
Membuka file
Operasi pertama umumnya dilakukan pada objek dari salah satu kelas-kelas ini adalah untuk menghubungkan ke file yang sebenarnya. Prosedur ini dikenal sebagai untuk membuka file. File terbuka direpresentasikan dalam sebuah program oleh objek stream (sebuah Instansiasi dari salah satu kelas tersebut, dalam contoh sebelumnya ini myfile) dan setiap input atau output operasi yang dilakukan pada objek sungai ini akan diterapkan ke file fisik yang diasosiasikan dengan hal itu .
Untuk membuka file dengan objek sungai kita menggunakan fungsi open ():
open (filename, mode);
Dimana nama file adalah karakter null diakhiri urutan const char * tipe (jenis yang sama yang telah string literal) yang mewakili nama file yang akan terbuka, dan modus adalah parameter opsional dengan kombinasi flag-flag berikut:
ios::in ->buka file untuk masukan operasi.
ios::out ->buka file untuk operasi output.
ios::binary -> Buka dalam modus biner.
ios::ate ->Atur posisi awal pada EOF, Jika flag ini tidak diatur ke nilai apapun, posisi awal adalah awal file.
ios:: app ->Semua output operasi dilakukan pada akhir file, menambahkan konten saat ini isi dari file. flag ini hanya dapat digunakan di stream yang terbuka hanya untuk operasi keluaran saja.
ios:: trunc ->Jika file dibuka untuk operasi output yang sudah ada sebelumnya, isi sebelumnya akan dihapus dan diganti dengan yang baru.
Semua flag ini dapat dikombinasikan dengan menggunakan operator bitwise OR (|). Sebagai contoh, jika kita ingin membuka file biner example.bin dalam mode untuk menambahkan data kita bisa melakukannya dengan panggilan berikut untuk fungsi open ():
1 ofstream myfile;
2 myfile.open ( "example.bin", ios:: out | ios:: app | ios:: binary);
Setiap salah fungsi dari fungsi open () adalah anggota kelas ofstream, ifstream dan fstream memiliki modus default yang digunakan jika file dibuka tanpa argumen kedua:
kelas modus default parameter
ofstream : ios:: out
ifstream : ios:: in
fstream : ios:: in | ios:: out
.
Nilai standarnya adalah diterapkan jika fungsi dipanggil tanpa menentukan nilai setiap parameter. Jika fungsi ini dideklarasikan dengan nilai parameter, modus default diganti dan tidak digabungkan.
Stream file dibuka pada modus biner melakukan, operasi input dan output secara independen dari pertimbangan format apapun. File non-biner dikenal sebagai file teks, dan beberapa terjemahan mungkin terjadi karena format dari beberapa karakter khusus (seperti newline dan carriage return karakter).
Karena tugas yang pertama umumnya dilakukan pada file objek stream untuk membuka file, ini mencakup tiga kelas konstruktor panggilan yang secara otomatis anggota open() memiliki fungsi dan parameter yang persis sama seperti anggota ini. Oleh karena itu, kita bisa juga telah menyatakan myfile sebelumnya dilakukan objek dan operasi pembukaan yang sama dalam contoh kita sebelumnya dengan menulis:
ofstream myfile ( "example.bin", ios:: out | ios:: app | ios:: binary);
Menggabungkan objek konstruksi dan pembukaan stream dalam satu pernyataan. Kedua bentuk untuk membuka file yang valid dan setara.
Untuk memeriksa apakah stream file berhasil membuka sebuah file, Anda dapat melakukannya dengan memanggil is_open (). Anggota ini berfungsi mengembalikan nilai bool benar dalam kasus yang memang objek stream dikaitkan dengan membuka file,atausebaliknya:
if (myfile.is_open ()) (/ * ok, lanjutkan dengan output * /)
Menutup file
Ketika kita sudah selesai dengan operasi input dan output pada sebuah file kita akan menutupnya sehingga file menjadi tersedia lagi. Untuk melakukan itu kita harus memanggil fungsi anggota sungai close (). Anggota ini tidak memerlukan parameter fungsi, dan apa yang dilakukannya adalah untuk flush buffer terkait dan menutup file:
myfile.close ();
Sekali fungsi member ini disebut, objek stream dapat digunakan untuk membuka file lain, dan file yang tersedia lagi untuk dapat dibuka oleh proses lainnya.
jika suatu objek hancur dan masih berhubungan dengan file yang terbuka, maka secara otomatis akan memanggil fungsi penghancur, sebagai anggota dr fungsi close().
File teks
Stream file teks tidak termasuk dalam fungsi open() ios:: binary. File-file ini dirancang untuk menyimpan teks dan dengan demikian semua nilai yang kita input atau output dari / kepada mereka dapat mengalami beberapa perubahan format, yang tidak selalu sesuai dengan nilai biner harfiah mereka.
Output data operasi pada file teks dilakukan dengan cara yang sama kita beroperasi dengan pengadilan:
1/ / menulis di sebuah file teks
2# include
3# include
4using namespace std;
5
6int main () (
7 ofstream myfile ( "example.txt");
8 if (myfile.is_open ())
9 (
10 myfile << "Ini adalah garis. \ n";
11 myfile << "Ini adalah baris lain. \ n";
12 myfile.close ();
13 )
14 else cout << "Tidak dapat membuka file";
15 return 0;
16 )
[File example.txt]
Ini adalah baris.
Ini adalah baris lain.
Input data dari sebuah file dapat juga dilakukan dengan cara yang sama yang kita lakukan dengan cin:
1 / / membaca file teks
2 # include
3 # include
4 # include
5 using namespace std;
6
7 int main () (
8 string baris;
9 ifstream myfile ( "example.txt");
10 if (myfile.is_open ())
11 (
12 while (! myfile.eof ())
13 (
14 getline (myfile, line);
15 cout <
17 myfile.close ();
18 )
19
20 else cout << "Tidak dapat membuka file";
21
22 return 0;
23 )
Ini adalah baris.
Ini adalah baris lain.
Contoh terakhir ini membaca sebuah berkas teks dan mencetak keluar isinya di layar. Perhatikan bagaimana kita telah menggunakan fungsi anggota baru, yang disebut eof () yang mengembalikan nilai true dalam kasus bahwa akhir file telah tercapai. Kami telah menciptakan sebuah sementara loop yang selesai ketika memang myfile.eof () menjadi benar (yaitu, akhir dari file telah tercapai).
Memeriksa status flag
Selain eof (), yang memeriksa apakah akhir file telah tercapai, ada fungsi anggota lain untuk memeriksa keadaan suatu aliran (semua dari mereka mengembalikan nilai bool):
bad ()
Mengembalikan nilai true jika suatu operasi membaca atau menulis gagal. Sebagai contoh dalam kasus bahwa kami mencoba untuk menulis ke sebuah file yang tidak terbuka, atau untuk menulis dimana tidak mempunyai ruang tersisa untuk ditulisi.
fail ()
Mengembalikan nilai true dalam kasus yang sama dengan bad (), tetapi juga dalam kasus yang terjadi kesalahan format, seperti ketika sebuah karakter alfabet diekstrak ketika kita mencoba membaca sebuah integer nomor.
eof ()
Mengembalikan nilai true jika file yang terbuka untuk membaca telah mencapai akhir.
good ()
Ini adalah status flag yang paling generik, dan mengembalikan nilai false dalam kasus yang sama yang memanggil salah satu fungsi sebelumnya akan kembali benar.
Dalam rangka menreset status flag, kita dapat mengeceknya dengan menggunakan fungsi clear(),yang tidak menggunakna parameter.
Diambil dari cplusplus.com

0 komentar:
Posting Komentar