01/10/2018, 17:13
Cin.ignore() không hoạt động?
Chào mọi người!
Em có code đoạn code dưới đây để sử dụng cin.ignore() loại hết ký tự nhập thừa trong stdin ra để cin cho nhập ký tự mới, nhưng lại không hoạt động ạ: (fflush thì vẫn hoạt động đc)
Code: https://ideone.com/yxE7Pn
#include <iostream>
#include <cstdint>
using namespace std;
int main()
{
char ch;
cout << "Type a character: ";
cin >> ch;
cout << "ASCII code: " << static_cast<int16_t>(ch) << endl;
if (!cin.eof())
cout << "There are some characters more in stdin file object
";
char next_ch;
cin.ignore(INT64_MAX, '
');
//fflush(stdin);
cin >> next_ch;
cout << "The next character: " << next_ch << endl;
return 0;
}
Cho em hỏi lỗi ở đâu mà cin vẫn nhận ký tự thừa trong stdin dù có cin.ignore() ạ?
Bài liên quan
thử in
std::cout << sizeof(std::streamsize)
xem nó ra 4 hay 8? Nếu là 4 thì ko thể truyền vào INT64_MAX đượcxài
std::numeric_limits<std::streamsize>::max()
trong<limits>
thay choINT64_MAX
trong<cstdint>
cin.ignore nhận 2 giá trị, kiểu của giá trị thứ nhất là
std::streamsize
chứ ko phải làint64_t
. Tùy vào trình biên dịch màstd::streamsize
có thể có 32 bit hoặc 64 bit. Nếu là 32 bit thì INT64_MAX có giá trị là 0xffffffffffffffff, bị chuyển về int 32 bit nó chỉ lấy 32 bit thấp nhất => 0xffffffff = -1.cin.ignore(INT64_MAX, '\n')
khi này đồng nghĩa vớicin.ignore(-1, '\n')
nên nó chả ignore ký tự nào cả vì 0 > -1 rồi. Phải xàinumeric_limits<streamsize>::max()
thì nó mới tự động lấy đúng max củastd::streamsize
Vậy là trong trường hợp trên, streamsize là 32bit đúng ko ạ?
em tự
cout
cáisizeof(streamsize)
ra coi là biết.