Hi mọi người,
Mình xin hỏi một tình huống dùng cin.getline()
bị lỗi sau mà mình chưa tìm được câu trả lời ạ:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char name[10];
cin.getline(name, 10);
cin.clear();
cout << name << endl;
int a;
cin >> a;
cout << "Number " << a << endl;
return 0;
}
Input:
Hello World
1
Output:
Hello Wor
Number 0
Mình đã tìm hiểu thì được biết rằng khi nhập quá số lượng ký tự quy định trong tham số, cả cin.get()
và cin.getline()
dừng việc nhập xuất và các ký tự còn sót lại trong buffer. Tuy nhiên, cin.getline()
bật flag failbit
và không cho phép tiếp tục nhập input.
Một giải pháp khả thi là dùng cin.clear()
để restore input. Ví dụ:
char name1[10], name2[10];
cin.getline(name1, 10);
cin.clear();
cin.getline(name2, 10);
cout << name1 << endl << name2;
sẽ in ra đủ:
Hello Wor
ld
với input là Hello World
.
Vì vậy, mình thắc mắc là việc nhập biến int
như trên vì sao không khả thi (dù mình có cin.clear()
) ạ?
Mình xin cảm ơn.