นี่คือรหัสของฉันตามที่เป็นอยู่ในปัจจุบัน รหัสนี้ทำให้เกิดข้อผิดพลาดใน cin.get() ฉันเข้าใจว่ามันไม่ใช่โค้ดที่ดี มันไม่ควรจะเป็นเช่นนั้น ฉันแค่ทดสอบบางอย่าง
#include <string>
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
char c[1000];
cin.setstate(cin.eofbit);
cout << cin.good() << endl;
cout << cin.eof() <<endl;
cout << cin.get() << endl;
cin.putback('c');
cout << cin.get() << endl;
cout << "Do we ever reach this?" << endl;
while(1){
};
return 0;
}
ถึงอย่างไร. ปัญหาของฉันคือ cin.get(), cin.peek(), cin.ignore(), getchar() หรือฟังก์ชัน cin หรือ stdio ใดๆ ก็ตามที่คุณสามารถตั้งชื่อได้ว่าจะหยุดการทำงานของโปรแกรมของฉันชั่วคราวเมื่อสตรีมว่างเปล่า โดยไม่มีการตั้งค่า EOF บิตหรืออะไรก็ได้ สิ่งนี้ทำให้ฉันรำคาญ เนื่องจากฉันต้องการตรวจสอบว่ามีอะไรอยู่ในสตรีมหรือไม่ เพื่อที่ฉันจะได้เคลียร์มันได้ เนื่องจาก allowance() จะหยุดชั่วคราวเสมอ
วิธีเดียวที่ฉันสามารถทำงานได้คือ 'istream::readsome' ฉันโหลดสิ่งนี้ลงในอาร์เรย์ถ่านแล้วพิมพ์โดยใช้ cout มันพิมพ์สัญลักษณ์ยาวๆ ที่ฉันไม่รู้จัก (แต่ละอันเป็นสัญลักษณ์เฉพาะตัว)
http://gyazo.com/e3ee65cdad7ed5cc7b2ce2307ca58c90
โยนเป็นจำนวนเต็มออกมาเป็น -52 ซึ่งไม่เท่ากับสิ่งใดใน ASCII หรือ Unicode
ฉันกำลังรวบรวมโดยใช้ Visual C++ Express 2010
ช่วยหน่อยนะครับ ผมงงมาก ณ จุดนี้ ฉันเพียงต้องการอ่านตัวอักษร/ล้างสตรีมของฉัน โดยไม่หยุดชั่วคราวหากไม่มีสิ่งใดอยู่ ฉันใช้เวลา 3 ชั่วโมงในการพยายามแก้ไขปัญหานี้ ถอนหายใจ
sync()
ละทิ้งสิ่งที่เหลืออยู่ในบัฟเฟอร์ แต่ไม่รับประกันพฤติกรรมดังกล่าว - person chris   schedule 13.11.2012Ctrl + Z
- person Jesse Good   schedule 13.11.2012std::getline
และstd::string
จึงไม่เพียงพอ - person Jesse Good   schedule 13.11.2012