sách gpt4 ai đã đi

c++ - 输入不正确时清除 istream

In lại 作者:行者123 更新时间:2023-11-28 06:57:02 26 4
mua khóa gpt4 Nike

Tôi đang kiểm tra istream 类,但没有看到可以完全清除缓冲区并将输入设置为为下一个“干净”输入做好准备的方法。

我为我的类定义了提取运算符,在我的主程序中我要求用户输入,如下所示:

while (true) {
thử {
cout << "Enter input: ";
MyClass c;
cin >> c;
return c;
} catch(const MyException& e) {
cerr << "Error\n";
}
}

如果我输入了意外的错误输入,我将陷入无限循环。

在我覆盖的 extractin 方法中,我控制输入不正确并抛出异常,这一切都可以。我还想清理 istream 对象,以防止无限循环。

1 Câu trả lời

首先,您的类的插入器/提取器不应抛出异常。 IOStreams 被设计为默认不抛出异常并保持一致,我建议您不要从 I/O 操作符抛出自定义异常。

正如 Dieter 所说,您最好设置 std::ios_base::failbit在流状态中标记而不是抛出。您可以使用 setstate() 执行此操作方法。执行此操作后,您可以使用 if() 语句检查提取是否有效。要回答您的问题,一旦您确定输入是否无效,您就会清除流状态,并通过调用 ignore() 清除新输入的缓冲区。丢弃其余字符:

while (std::cout << "Enter input: ")
{
X x;
if (!(std::cin >> x))
{
std::cout << "Invalid. Try again.\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits::max(), '\n');
continue; // or break if needed
}
// handle good input and break if needed
}

关于c++ - 输入不正确时清除 istream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23029356/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com