Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การใช้ getline() ใน C++ เมื่อมีบรรทัดว่างใน Input

ฟังก์ชัน 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');