คุณได้อ้างคำตอบ:
บัฟเฟอร์เอาต์พุตสามารถล้างออกได้อย่างชัดเจนเพื่อบังคับให้เขียนบัฟเฟอร์
นั่นคือคุณอาจต้อง "ล้าง" เอาต์พุตเพื่อทำให้ถูกเขียนไปยังสตรีมที่อยู่เบื้องหลัง (ซึ่งอาจเป็นไฟล์หรือในตัวอย่างที่ระบุไว้คือเทอร์มินัล)
โดยทั่วไป stdout / cout เป็นแบบ line-buffered: เอาต์พุตจะไม่ถูกส่งไปยัง OS จนกว่าคุณจะเขียนขึ้นบรรทัดใหม่หรือล้างบัฟเฟอร์อย่างชัดเจน ข้อดีคือสิ่งที่ต้องการstd::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
ทำให้เกิดการเขียนเพียงครั้งเดียวใน "ไฟล์" ที่อยู่ภายใต้แทนที่จะเป็นหกซึ่งดีกว่ามากสำหรับประสิทธิภาพ ข้อเสียคือรหัสเช่น:
for (int i = 0; i < 5; i++) {
std::cout << ".";
sleep(1);
}
std::cout << "\n";
จะแสดงผล.....
พร้อมกัน (สำหรับsleep
การใช้งานที่แน่นอนโปรดดูคำถามนี้ ) ในกรณีเช่นนี้คุณจะต้องเพิ่ม<< std::flush
เพื่อให้แน่ใจว่าเอาต์พุตจะแสดงขึ้น
การอ่านจะกระcin
พริบcout
ดังนั้นคุณไม่จำเป็นต้องล้างข้อมูลอย่างชัดเจนเพื่อทำสิ่งนี้:
std::string colour;
std::cout << "Enter your favourite colour: ";
std::cin >> colour;