Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao std ::getline () bỏ qua đầu vào sau khi trích xuất được định dạng?

Std ::getline () bỏ qua đầu vào sau khi trích xuất có định dạng. Chúng tôi chỉ cần kiểm tra lỗi này từ đoạn mã sau -

Mã mẫu

#include <iostream>
#include <string>
using namespace std;

int main(){
   string name;
   string city;

   if (cin >> name && getline(cin, city)){
      cout << "Your name " << name << " and city " << city;
   }
}

Đầu ra

Amal
Your name Amal and city

Chúng ta có thể thấy rằng chương trình không lấy đầu vào thứ hai. Đôi khi, nó có thể lấy đầu vào thứ hai nhưng trong đầu ra, nó sẽ chỉ hiển thị đầu vào đầu tiên. Bây giờ câu hỏi đặt ra là tại sao nó lại hoạt động như vậy?

Lý do chính của vấn đề này là khi chúng ta đang viết chuỗi đầu tiên, sau đó chúng ta đang nhấn nút Enter hoặc Return. Khi nhấn Enter hoặc Return, nó sẽ chèn ký tự ‘\ n’ vào sau dòng hiện tại. Nhân vật này đang tạo ra vấn đề. Nó đang bỏ qua phần tiếp theo của chuỗi.

Nếu tên là "Amal", thì bên trong nó đang nhận "Amal \ n". Để khắc phục sự cố này, một tùy chọn là gọi std ::cin.ignore () sau lần trích xuất đầu tiên. Sau đó, nó sẽ loại bỏ ký tự có sẵn tiếp theo, vì vậy nó sẽ hoạt động tốt.