C++ อินพุต/เอาต์พุตพื้นฐาน: Cout, Cin, Cerr ตัวอย่าง

Streams คืออะไร C++?

C++ ให้ไลบรารีจำนวนหนึ่งแก่ผู้ใช้ที่พวกเขาสามารถใช้เพื่อทำงานอินพุต/เอาท์พุต งานเหล่านี้ทำในรูปแบบของลำดับไบต์ ซึ่งนิยมเรียกว่าสตรีม

ลำธารแบ่งออกเป็นสอง:

ประเภทของลำธาร

  • สตรีมอินพุต: นี่คือสตรีมประเภทหนึ่งที่ไบต์ไหลจากอุปกรณ์ เช่น คีย์บอร์ด ไปยังหน่วยความจำหลัก
  • กระแสเอาท์พุท: นี่คือสตรีมประเภทหนึ่งที่ไบต์ไหลไปในทิศทางตรงกันข้าม กล่าวคือ จากหน่วยความจำหลักไปยังอุปกรณ์ เช่น หน้าจอแสดงผล

สตรีมทำงานอย่างไร?

C++ สตรีมทำงานดังนี้:

  1. ขั้นแรก สตรีมจะเริ่มต้นด้วยประเภทที่ถูกต้อง
  2. ถัดไปคุณควรระบุที่ I / O จะเกิดขึ้นโดยใช้ตัวชี้รับ/วาง
  3. หลังจากถึงตำแหน่งที่ถูกต้องในสตรีมแล้ว คุณสามารถดำเนินการอินพุตและเอาต์พุตได้โดยใช้ตัวดำเนินการ >> และ << ตามลำดับ

ตารางฟังก์ชัน

ต่อไปนี้คือฟังก์ชันที่ให้ไว้ในไฟล์ส่วนหัว 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:

มาตรฐาน::ออก

นี่คือภาพหน้าจอของรหัส:

มาตรฐาน::ออก

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ที่มีการกำหนดอ็อบเจ็กต์ cout
  2. รวมเนมสเปซมาตรฐานเพื่อที่เราจะได้ไม่ต้องเรียกมันเมื่อใช้คลาสของมัน
  3. เรียกใช้ฟังก์ชัน main() ควรเพิ่มโค้ดโปรแกรมภายในเนื้อหา เครื่องหมายปีกกาเปิด { เป็นเครื่องหมายเริ่มต้นของร่างกาย
  4. สร้างตัวแปรอักขระชื่อยินดีต้อนรับเพื่อเก็บสตริงยินดีต้อนรับสู่ Guru99
  5. พิมพ์ค่าของสตริงยินดีต้อนรับบนคอนโซล จุดสิ้นสุดคือ a C++ คำสำคัญหมายถึงบรรทัดสิ้นสุด เลื่อนเคอร์เซอร์เพื่อเริ่มพิมพ์ข้อความในบรรทัดถัดไป
  6. โปรแกรมจะต้องคืนค่าเมื่อดำเนินการสำเร็จ
  7. ส่วนท้ายของฟังก์ชัน 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:

มาตรฐาน::cin

นี่คือภาพหน้าจอของรหัส:

มาตรฐาน::cin

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ลงในโปรแกรมของเรา วัตถุ cin ถูกกำหนดไว้ในไฟล์ส่วนหัวนี้
  2. รวมเนมสเปซมาตรฐานเพื่อใช้คลาสของมัน คุณจะไม่ต้องโทร std เมื่อใช้คลาสของมัน
  3. เรียกใช้ฟังก์ชัน main() ควรเพิ่มโค้ดโปรแกรมภายในเนื้อหา
  4. จุดเริ่มต้นของเนื้อความของโปรแกรม
  5. ประกาศก ตัวแปรจำนวนเต็ม หมายเลขชื่อ
  6. พิมพ์ข้อความบนหน้าจอแจ้งให้ผู้ใช้ป้อนหมายเลข
  7. อ่านค่าที่ผู้ใช้ป้อนบนคอนโซลจากแป้นพิมพ์
  8. พิมพ์ค่าที่อ่านด้านบนบนคอนโซลควบคู่ไปกับข้อความอื่น
  9. โปรแกรมควรส่งคืนค่าหากดำเนินการได้สำเร็จ
  10. ส่วนท้ายของฟังก์ชันหลัก

มาตรฐาน::cerr

อ็อบเจ็กต์ Cerr สร้างกระแสข้อผิดพลาดมาตรฐานสำหรับเอาต์พุตข้อผิดพลาด C++Cerr คืออินสแตนซ์ของคลาส ostream อ็อบเจ็กต์ cerr เป็นแบบไม่มีบัฟเฟอร์ ซึ่งหมายความว่าจะใช้เมื่อต้องแสดงข้อความแสดงข้อผิดพลาดทันที

เนื่องจากไม่มีบัฟเฟอร์ จึงไม่เก็บข้อความแสดงข้อผิดพลาดสำหรับการแสดงผลในภายหลัง แต่จะใช้ร่วมกับตัวดำเนินการแทรกสตรีม (<<)

ตัวอย่าง

#include <iostream>
using namespace std;
int main() {

	cerr << "An Error occurred!";

	return 0;
}

Output:

มาตรฐาน::cerr

นี่คือภาพหน้าจอของรหัส:

มาตรฐาน::cerr

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ที่มีการกำหนดวัตถุ cerr
  2. รวมเนมสเปซมาตรฐานเพื่อที่เราจะได้ไม่ต้องเรียกมันเมื่อใช้คลาสของมัน
  3. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหา เครื่องหมายปีกกาเปิดถือเป็นจุดเริ่มต้นของส่วนเนื้อหาของฟังก์ชัน
  4. ใช้วัตถุ cerr เพื่อพิมพ์ข้อผิดพลาดบนคอนโซล
  5. โปรแกรมจะต้องคืนค่าเมื่อดำเนินการสำเร็จ
  6. ส่วนท้ายของฟังก์ชันหลัก

มาตรฐาน::อุดตัน

วัตถุ clog เป็นอินสแตนซ์ของคลาส ostream ซึ่งใช้เพื่อแสดงข้อผิดพลาดบนจอแสดงผลมาตรฐาน ซึ่งก็คือมอนิเตอร์ วัตถุนี้มีลักษณะคล้ายกับวัตถุ cerr แต่มีการบัฟเฟอร์ เนื่องจากวัตถุนี้มีการบัฟเฟอร์ จึงจัดเก็บข้อความแสดงข้อผิดพลาดไว้ในบัฟเฟอร์จนกว่าบัฟเฟอร์จะเต็มหรือล้างข้อมูล วัตถุนี้ใช้ร่วมกับตัวดำเนินการแทรกสตรีม (<<)

ตัวอย่าง

#include <iostream>
using namespace std;
int main() {
	clog << "An Error occurred!";
	return 0;
}

Output:

มาตรฐาน::อุดตัน

นี่คือภาพหน้าจอของรหัส:

มาตรฐาน::อุดตัน

คำอธิบายรหัส:

  1. รวมถึงไฟล์ส่วนหัว iostream ที่กำหนดวัตถุอุดตัน
  2. รวมเนมสเปซมาตรฐานเพื่อให้เราสามารถใช้คลาสของมันโดยไม่ต้องเรียกมัน
  3. การเรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหา { เป็นเครื่องหมายจุดเริ่มต้นของเนื้อหาของฟังก์ชัน
  4. ใช้วัตถุอุดตันเพื่อพิมพ์ข้อผิดพลาดบนเอาต์พุตมาตรฐานจอภาพ
  5. โปรแกรมจะต้องส่งคืนค่าเมื่อดำเนินการเสร็จสิ้น
  6. ส่วนท้ายของฟังก์ชัน 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 จะไม่ทำ