ฟังก์ชัน getline() อ่านข้อมูลจนกว่าจะเจอ newline หรือ delimiter ที่กำหนด ปัญหาคือหากมีบรรทัดว่าง getline() จะคืนสตริงว่างทันที
วิธีแก้
ใช้ลูป while ข้ามบรรทัดว่างไปเรื่อยๆ จนกว่าจะได้ข้อมูลจริง
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
int main() {
string str;
int term = 4;
while (term--) {
getline(cin, str);
// ข้ามบรรทัดว่าง
while (str.length() == 0)
getline(cin, str);
cout << str << " : New Line" << endl;
}
return 0;
}
ตัวอย่างการทำงาน
Hello Hello : New Line World World : New Line This is This is : New Line C++ Language C++ Language : New Line
หมายเหตุเพิ่มเติม
- หากใช้
cin >> varก่อนgetline()ต้องใช้cin.ignore()เพื่อลบ newline ที่เหลือใน buffer - รูปแบบที่แนะนำ:
cin.ignore(numeric_limits<streamsize>::max(), '\n');