Nhập chuỗi trong C++

Em chào mọi người ạ. Em đang gặp vấn đề về nhập chuỗi ở c++, khi em chạy thì sau khi nhập chuỗi thứ nhất thì nó hiện như này và phải ấn enter mới sang bước nhập chuỗi thứ 2.
image

image

#include <iostream>
using namespace std;

int main()
{
	int n;
	cout<<"Nhap n : "; cin>>n;
	for (int i = 0; i < n; i++)
	{
		string s;
		cin.ignore();
		cout<<"Nhap xau "<<i+1<<": "; getline(cin, s);
	} 
}

em dời cái cin.ignore ra ngoài vòng lặp để liền sau cin>>n là được :V

ignore chỉ để giữa cin>> và getline thôi, để ignore cái dòng trống mà cin>> ko đọc :V Vòng lặp của em thì nó chạy như thế này
cin>>n
cin.ignore
getline(cin, s)
cin.ignore // dư cái này
getline(cin, s)
cin.ignore // dư cái này
getline(cin, s)
cin.ignore // dư cái này
getline(cin, s)
cin.ignore // dư cái này
getline(cin, s)

mà viết cin.ignore() thì nó chỉ ignore 1 ký tự :V lỡ em nhập n là 4 \n có 1 dấu cách giữa số 4 và ký tự xuống dòng thì nó chỉ ignore dấu cách này :V Nên viết là cin.ignore(100, '\n'); cho nó ignore tối đa 100 ký tự, hoặc tới khi gặp ký tự \n thì dừng. Nhưng cách này vẫn gặp vấn đề lỡ ai chơi ác để 101 dấu cách sau số 4 thì sao :V :V Chính xác nhất là viết std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); :V :V :V

6 Likes

em hiểu rồi ạ, em cảm ơn anh ạ

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?