gpt4 book ai didi

c++ - 可能有多个 while (cin>>input)

转载 作者:太空宇宙 更新时间:2023-11-04 16:03:28 26 4
gpt4 key购买 nike

我想知道是否可以有多个 while (cin>>(variable)) 如下代码所示:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
vector<int> v1, v2;
int input;

while (cin>>input)
v1.push_back(input);

while (cin>>input)
v2.push_back(input);

return 0;
}

我的程序的逻辑是让用户在两组 int vector 中定义元素的数量和每个元素的值。

但是,我意识到在为第一个 vector 输入第一组数字(以 EOF 结尾)后,我无法为第二个 vector 输入第二组数字,程序立即终止。我怀疑 EOF 意味着第一个 vector 的第一个 cin 也由第二个 vector 的第二个 cin 处理。

有没有办法让上面的程序正确运行,即有不止一个 while (cin)?

最佳答案

当您执行 while (cin>>input) 时,您实际上是在要求输入流 cin 生成整数,直到流变坏(即遇到 EOF ,Steam 无法将用户的输入转换为整数,或者可能存在其他问题)。

循环终止后,流的状态仍将处于导致它停止循环的任何状态。为了继续从 cin 读取直到遇到另一个 EOF token ,您需要首先清除 eof 失败位,这可以通过使用 cin.clear 来完成(正如 πìντα ῥεῖ 指出的那样) ()。但是,您应该首先检查 cin 的状态,以防由于其他原因(可能用户输入的是单词而不是数字)导致输入失败。

两个选项可能是:检查是否只设置了 eof 位,或者您只能取消设置 eof 位:

if (cin.eof())
{
std::cout << "Yay, reached an EOF" << std::endl;
}

cin.clear(std::ios_base::eofbit);

关于c++ - 可能有多个 while (cin>>input),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39534406/

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