ฉันกำลังใช้ lexer แบบกำหนดเองใน C++ และเมื่อพยายามอ่านในช่องว่าง ifstream จะไม่อ่านออกมา ฉันกำลังอ่านอักขระทีละอักขระโดยใช้ >>
และช่องว่างทั้งหมดก็หายไป มีวิธีใดบ้างที่จะทำให้ ifstream เก็บช่องว่างทั้งหมดและอ่านให้ฉันฟัง ฉันรู้ว่าเมื่ออ่านสตริงทั้งหมด การอ่านจะหยุดที่ช่องว่าง แต่ฉันหวังว่าการอ่านอักขระทีละอักขระ ฉันจะหลีกเลี่ยงพฤติกรรมนี้ได้
พยายามแล้ว: .get()
แนะนำโดยหลายคำตอบ แต่มีผลเช่นเดียวกับ std::noskipws
นั่นคือตอนนี้ฉันได้รับช่องว่างทั้งหมดแล้ว แต่ ไม่ใช่ อักขระขึ้นบรรทัดใหม่ที่ฉันต้องใช้เพื่อสร้างโครงสร้างบางส่วน
นี่คือรหัสที่ละเมิด (ความคิดเห็นเพิ่มเติมถูกตัดทอน)
while(input >> current) {
always_next_struct val = always_next_struct(next);
if (current == L' ' || current == L'\n' || current == L'\t' || current == L'\r') {
continue;
}
if (current == L'/') {
input >> current;
if (current == L'/') {
// explicitly empty while loop
while(input.get(current) && current != L'\n');
continue;
}
ฉันกำลังทะลุบรรทัด while
และดูทุกค่าของ current
ที่เข้ามา และ \r
หรือ \n
ไม่ใช่ค่าเหล่านั้นอย่างแน่นอน - อินพุตจะข้ามไปยังบรรทัดถัดไปในไฟล์อินพุต
\n
ในcurrent
เหมือนกับว่าget
พบกับ\n
คุณจะอยู่ในบรรทัดต่อไป ไม่ใช่บรรทัด while หรือผมเข้าใจผิด? - person CB Bailey   schedule 21.07.2011L'\n'
คือ 16 บิตwchar_t
ไม่ใช่ 8 บิตchar
แต่นั่นไม่น่าจะแตกต่างกัน - person René Richter   schedule 21.07.2011wifstream
- person Puppy   schedule 21.07.2011input.get()
สำหรับทั้งสามอินพุตใช่ไหม - person René Richter   schedule 21.07.2011