Tôi có câu hỏi hơi giống với câu hỏi này trên stackoverflow std::cin.clear() fails to restore input stream in a good state, nhưng câu trả lời được cung cấp ở đó không có tác dụng đối với tôi.Đặt lại trạng thái của luồng
Câu hỏi đặt ra là: làm cách nào để đặt lại trạng thái của luồng thành 'tốt'?
Đây là mã của tôi làm thế nào tôi thử nó, nhưng nhà nước không bao giờ được thiết lập để tốt một lần nữa. Tôi sử dụng cả hai dòng bỏ qua một cách riêng biệt.
int _tmain(int argc, _TCHAR* argv[])
{
int result;
while (std::cin.good())
{
std::cout << "Choose a number: ";
std::cin >> result;
// Check if input is valid
if (std::cin.bad())
{
throw std::runtime_error("IO stream corrupted");
}
else if (std::cin.fail())
{
std::cerr << "Invalid input: input must be a number." << std::endl;
std::cin.clear(std::istream::failbit);
std::cin.ignore();
std::cin.ignore(INT_MAX,'\n');
continue;
}
else
{
std::cout << "You input the number: " << result << std::endl;
}
}
return 0;
}
Trong sách của tôi, nội dung: rõ ràng (cờ) đặt trạng thái trạng thái được chỉ định thành hợp lệ. Tôi giải thích điều này là: xóa bit lỗi được chỉ định. Điều này là không chính xác sau đó? – physicalattraction
Nó chỉ là 'clear()' để xóa * tất cả * cờ. Để xóa một lá cờ đơn lẻ phức tạp hơn một chút (và không quá hữu ích). Tôi đã thêm một phần mới vào câu trả lời của mình. –