C++ อินพุต/เอาต์พุตพื้นฐาน: Cout, Cin, Cerr ตัวอย่าง
Streams คืออะไร C++?
C++ ให้ไลบรารีจำนวนหนึ่งแก่ผู้ใช้ที่พวกเขาสามารถใช้เพื่อทำงานอินพุต/เอาท์พุต งานเหล่านี้ทำในรูปแบบของลำดับไบต์ ซึ่งนิยมเรียกว่าสตรีม
ลำธารแบ่งออกเป็นสอง:
ประเภทของลำธาร
- สตรีมอินพุต: นี่คือสตรีมประเภทหนึ่งที่ไบต์ไหลจากอุปกรณ์ เช่น คีย์บอร์ด ไปยังหน่วยความจำหลัก
- กระแสเอาท์พุท: นี่คือสตรีมประเภทหนึ่งที่ไบต์ไหลไปในทิศทางตรงกันข้าม กล่าวคือ จากหน่วยความจำหลักไปยังอุปกรณ์ เช่น หน้าจอแสดงผล
สตรีมทำงานอย่างไร?
C++ สตรีมทำงานดังนี้:
- ขั้นแรก สตรีมจะเริ่มต้นด้วยประเภทที่ถูกต้อง
- ถัดไปคุณควรระบุที่ I / O จะเกิดขึ้นโดยใช้ตัวชี้รับ/วาง
- หลังจากถึงตำแหน่งที่ถูกต้องในสตรีมแล้ว คุณสามารถดำเนินการอินพุตและเอาต์พุตได้โดยใช้ตัวดำเนินการ >> และ << ตามลำดับ
ตารางฟังก์ชัน
ต่อไปนี้คือฟังก์ชันที่ให้ไว้ในไฟล์ส่วนหัว stream.h:
ชั้น | ฟังก์ชั่น |
---|---|
ไฟล์บุฟ | ตั้งค่าบัฟเฟอร์ไฟล์ให้อ่าน/เขียน มีฟังก์ชัน close() และ open() อยู่ในนั้น |
fstreambase | เป็นคลาสพื้นฐานสำหรับคลาส ifstream, fstream และ ofstream การทำงานของคลาสนี้เป็นเรื่องปกติสำหรับสตรีมไฟล์ |
ถ้าสตรีม | มันเป็นคลาสสตรีมไฟล์อินพุตสำหรับการดำเนินการอินพุต |
ของกระแส | มันเป็นคลาสสตรีมไฟล์เอาท์พุตสำหรับการดำเนินการเอาท์พุต |
สตรีม | เป็นคลาสสตรีมอินพุต/เอาต์พุต รองรับการทำงานอินพุต/เอาต์พุตพร้อมกัน |
C++ ไฟล์ส่วนหัวสำหรับอินพุต/เอาท์พุต
C++ มีไลบรารีสามไลบรารีที่มาพร้อมกับฟังก์ชันสำหรับการดำเนินงานอินพุต/เอาท์พื้นฐาน ประกอบด้วย:
- ไอโอสตรีม: เป็นตัวย่อสำหรับสตรีมอินพุต/เอาท์พุตมาตรฐาน ไฟล์ส่วนหัวนี้มาพร้อมกับคำจำกัดความสำหรับวัตถุเช่น cin/ cout/cerr
- ไอโอมานิป: เป็นตัวย่อสำหรับเครื่องมือควบคุมอินพุต/เอาท์พุต ไลบรารีมาพร้อมกับฟังก์ชันที่สามารถใช้สำหรับจัดการสตรีมได้ ประกอบด้วยคำจำกัดความสำหรับออบเจ็กต์ เช่น setw, setprecision และอื่นๆ
- สตรีม: นี่คือไฟล์ส่วนหัวสำหรับอธิบายสตรีมไฟล์ มันจัดการข้อมูลที่อ่านจากไฟล์เป็นอินพุตหรือที่เขียนไปยังไฟล์เอาต์พุต
คำหลัก cin และ cout เป็นที่นิยมอย่างมาก C++- ใช้สำหรับรับอินพุตและเอาต์พุตการพิมพ์ตามลำดับ หากต้องการใช้งาน คุณต้องรวมไฟล์ส่วนหัว iostream ไว้ในโปรแกรมของคุณ เหตุผลก็คือ พวกมันถูกกำหนดไว้ในไฟล์ส่วนหัวนั้น การไม่รวมไฟล์ส่วนหัว iostream จะทำให้เกิดข้อผิดพลาด ซึ่งเป็นผลมาจากความล้มเหลวของ C++ คอมไพเลอร์เพื่อทำความเข้าใจความหมายของคำสำคัญ
อ็อบเจ็กต์หลักที่กำหนดไว้ในไฟล์ส่วนหัว iostream คือ cin, cout, cerr และ clog มาหารือกัน
มาตรฐาน::ออก
วัตถุ cout เป็นอินสแตนซ์ของคลาส iostream ซึ่งใช้ในการสร้างเอาต์พุตบนอุปกรณ์เอาต์พุตมาตรฐาน ซึ่งปกติจะเป็นหน้าจอ โดยใช้ร่วมกับตัวดำเนินการแทรกสตรีม (<<)
ตัวอย่าง
#include <iostream> using namespace std; int main() { char welcome[] = "Welcome to Guru99"; cout << welcome << endl; return 0; }
Output:
นี่คือภาพหน้าจอของรหัส:
คำอธิบายรหัส:
- รวมไฟล์ส่วนหัว iostream ที่มีการกำหนดอ็อบเจ็กต์ cout
- รวมเนมสเปซมาตรฐานเพื่อที่เราจะได้ไม่ต้องเรียกมันเมื่อใช้คลาสของมัน
- เรียกใช้ฟังก์ชัน main() ควรเพิ่มโค้ดโปรแกรมภายในเนื้อหา เครื่องหมายปีกกาเปิด { เป็นเครื่องหมายเริ่มต้นของร่างกาย
- สร้างตัวแปรอักขระชื่อยินดีต้อนรับเพื่อเก็บสตริงยินดีต้อนรับสู่ Guru99
- พิมพ์ค่าของสตริงยินดีต้อนรับบนคอนโซล จุดสิ้นสุดคือ a C++ คำสำคัญหมายถึงบรรทัดสิ้นสุด เลื่อนเคอร์เซอร์เพื่อเริ่มพิมพ์ข้อความในบรรทัดถัดไป
- โปรแกรมจะต้องคืนค่าเมื่อดำเนินการสำเร็จ
- ส่วนท้ายของฟังก์ชัน main()
มาตรฐาน::cin
วัตถุ cin เป็นอินสแตนซ์ของคลาส istream โดยจะอ่านอินพุตจากอุปกรณ์อินพุต ซึ่งก็คือแป้นพิมพ์ โดยปกติจะใช้ร่วมกับตัวดำเนินการแยก (>>) วัตถุการแยกจะรับผิดชอบในการแยกข้อมูลที่ป้อนผ่านแป้นพิมพ์จากวัตถุ cin
ตัวอย่าง
ตัวอย่างต่อไปนี้สาธิตวิธีการใช้คำสำคัญ cin ใน C++:
#include <iostream> using namespace std; int main() { int number; cout << "Enter a number:"; cin >> number; cout << "\nYou entered: " << number; return 0; }
Output:
นี่คือภาพหน้าจอของรหัส:
คำอธิบายรหัส:
- รวมไฟล์ส่วนหัว iostream ลงในโปรแกรมของเรา วัตถุ cin ถูกกำหนดไว้ในไฟล์ส่วนหัวนี้
- รวมเนมสเปซมาตรฐานเพื่อใช้คลาสของมัน คุณจะไม่ต้องโทร std เมื่อใช้คลาสของมัน
- เรียกใช้ฟังก์ชัน main() ควรเพิ่มโค้ดโปรแกรมภายในเนื้อหา
- จุดเริ่มต้นของเนื้อความของโปรแกรม
- ประกาศก ตัวแปรจำนวนเต็ม หมายเลขชื่อ
- พิมพ์ข้อความบนหน้าจอแจ้งให้ผู้ใช้ป้อนหมายเลข
- อ่านค่าที่ผู้ใช้ป้อนบนคอนโซลจากแป้นพิมพ์
- พิมพ์ค่าที่อ่านด้านบนบนคอนโซลควบคู่ไปกับข้อความอื่น
- โปรแกรมควรส่งคืนค่าหากดำเนินการได้สำเร็จ
- ส่วนท้ายของฟังก์ชันหลัก
มาตรฐาน::cerr
อ็อบเจ็กต์ Cerr สร้างกระแสข้อผิดพลาดมาตรฐานสำหรับเอาต์พุตข้อผิดพลาด C++Cerr คืออินสแตนซ์ของคลาส ostream อ็อบเจ็กต์ cerr เป็นแบบไม่มีบัฟเฟอร์ ซึ่งหมายความว่าจะใช้เมื่อต้องแสดงข้อความแสดงข้อผิดพลาดทันที
เนื่องจากไม่มีบัฟเฟอร์ จึงไม่เก็บข้อความแสดงข้อผิดพลาดสำหรับการแสดงผลในภายหลัง แต่จะใช้ร่วมกับตัวดำเนินการแทรกสตรีม (<<)
ตัวอย่าง
#include <iostream> using namespace std; int main() { cerr << "An Error occurred!"; return 0; }
Output:
นี่คือภาพหน้าจอของรหัส:
คำอธิบายรหัส:
- รวมไฟล์ส่วนหัว iostream ที่มีการกำหนดวัตถุ cerr
- รวมเนมสเปซมาตรฐานเพื่อที่เราจะได้ไม่ต้องเรียกมันเมื่อใช้คลาสของมัน
- เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหา เครื่องหมายปีกกาเปิดถือเป็นจุดเริ่มต้นของส่วนเนื้อหาของฟังก์ชัน
- ใช้วัตถุ cerr เพื่อพิมพ์ข้อผิดพลาดบนคอนโซล
- โปรแกรมจะต้องคืนค่าเมื่อดำเนินการสำเร็จ
- ส่วนท้ายของฟังก์ชันหลัก
มาตรฐาน::อุดตัน
วัตถุ clog เป็นอินสแตนซ์ของคลาส ostream ซึ่งใช้เพื่อแสดงข้อผิดพลาดบนจอแสดงผลมาตรฐาน ซึ่งก็คือมอนิเตอร์ วัตถุนี้มีลักษณะคล้ายกับวัตถุ cerr แต่มีการบัฟเฟอร์ เนื่องจากวัตถุนี้มีการบัฟเฟอร์ จึงจัดเก็บข้อความแสดงข้อผิดพลาดไว้ในบัฟเฟอร์จนกว่าบัฟเฟอร์จะเต็มหรือล้างข้อมูล วัตถุนี้ใช้ร่วมกับตัวดำเนินการแทรกสตรีม (<<)
ตัวอย่าง
#include <iostream> using namespace std; int main() { clog << "An Error occurred!"; return 0; }
Output:
นี่คือภาพหน้าจอของรหัส:
คำอธิบายรหัส:
- รวมถึงไฟล์ส่วนหัว iostream ที่กำหนดวัตถุอุดตัน
- รวมเนมสเปซมาตรฐานเพื่อให้เราสามารถใช้คลาสของมันโดยไม่ต้องเรียกมัน
- การเรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหา { เป็นเครื่องหมายจุดเริ่มต้นของเนื้อหาของฟังก์ชัน
- ใช้วัตถุอุดตันเพื่อพิมพ์ข้อผิดพลาดบนเอาต์พุตมาตรฐานจอภาพ
- โปรแกรมจะต้องส่งคืนค่าเมื่อดำเนินการเสร็จสิ้น
- ส่วนท้ายของฟังก์ชัน main()
เกิดข้อผิดพลาดในการจัดการกับการสตรีม IO
หากต้องการตรวจสอบว่าสตรีมนั้นถูกต้องหรือไม่ คุณสามารถใช้สตรีมนั้นเป็นบูลีนได้
นี่คือตัวอย่าง:
ifstream file( "myfile.txt" ); if ( ! file ) { cout << "File NOT opened!" << endl; }
หากต้องการดูรายละเอียดเพิ่มเติมเกี่ยวกับสถานะสตรีม คุณสามารถใช้ฟังก์ชันเหล่านี้ได้:
- good()- จะคืนค่าเป็นจริงหากทุกอย่างโอเค
- bad()- จะคืนค่าเป็นจริงหากเกิดข้อผิดพลาดร้ายแรง
- fail() - จะส่งคืนค่า true หลังจากการดำเนินการสตรีมไม่สำเร็จ
- eof()- จะคืนค่าเป็นจริงหากถึงจุดสิ้นสุดของไฟล์
หากต้องการทราบว่าการดำเนินการอ่าน/เขียนบางอย่างล้มเหลวหรือไม่ ให้ทดสอบผลการอ่าน
ตัวอย่างเช่น หากต้องการตรวจสอบว่าผู้ใช้ป้อนจำนวนเต็มที่ถูกต้องหรือไม่ ให้ทำดังนี้
int p; if ( cin >> p ) { cout << "Enter valid number" << endl; }
สรุป
- งานอินพุตและเอาท์พุตใน C++ จะทำผ่านลำดับไบต์ ไบต์เรียกว่าสตรีม
- ในสตรีมอินพุต ไบต์จะไหลจากอุปกรณ์อินพุตเช่นแป้นพิมพ์ไปยังหน่วยความจำหลัก
- ในเอาท์พุตสตรีม หมายถึงไบต์จากหน่วยความจำหลักไปยังอุปกรณ์เอาท์พุต เช่น มอนิเตอร์
- อ็อบเจ็กต์ cin เป็นอินสแตนซ์ของคลาส istream มันอ่านอินพุตจากอุปกรณ์อินพุตเช่นคีย์บอร์ด
- วัตถุ cout เป็นตัวอย่างของคลาส ostream มันสร้างเอาท์พุตบนอุปกรณ์เอาท์พุตเช่นมอนิเตอร์
- วัตถุ Cerr เป็นตัวอย่างของคลาส ostream มันแสดงวัตถุข้อผิดพลาดบนมอนิเตอร์
- วัตถุอุดตันเป็นตัวอย่างของคลาส ostream จะแสดงข้อความแสดงข้อผิดพลาดบนอุปกรณ์เอาท์พุต
- วัตถุ clog จะบัฟเฟอร์ข้อความแสดงข้อผิดพลาด ในขณะที่วัตถุ cerr จะไม่ทำ