gpt4 book ai didi

c++ - 如何理解 C++ FAQ 中的 "program ignoring my input request"?

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:39 25 4
gpt4 key购买 nike

我正在尝试理解该项目:

Why is my program ignoring my input request after the first iteration?

来自 C++ 常见问题解答。

我编译了测试程序:

#include <iostream>

int main()
{
char name[1000];
int age;
for (;;)
{
std::cout << "Name: ";
std::cin >> name;
std::cout << "Age: ";
std::cin >> age;
}
return 0;
}

一切似乎都很好。然而,作者说存在一个问题:

Because the numerical extractor leaves non-digits behind in the input buffer.

正确的源代码应该是这样的:

int main()
{
char name[1000];
int age;
for (;;)
{
std::cout << "Name: ";
std::cin >> name;
std::cout << "Age: ";
std::cin >> age;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
return 0;
}

请您解释一下程序需要的行为是什么,我怎样才能得到不需要的行为?

编辑:

问题是我没想到程序应该处理错误,例如在需要数字输入时输入 10b。实际上,作者的修改处理了此类错误,但没有处理用户输入的错误,例如b10

最佳答案

在第一个示例中,如果您输入 a 作为姓名,然后输入 10b 作为年龄,程序的输出为

Name: a
Age: 10b
Name: Age:

现在我们得到这个的原因是来自 10b 的 b 留在流中,然后下一次 std::cin >> name;被称为它捕获 b 并继续询问年龄。在第二个例子中 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');将去掉数字后的字母,程序将正常运行。

关于c++ - 如何理解 C++ FAQ 中的 "program ignoring my input request"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29496802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com