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

标签 c++ vector while-loop cin

我想知道是否可以有多个 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/

相关文章:

Android NDK 构建 .so 但 Unresolved inclusion 所有包含

c# - while 循环 C# 的登录系统问题

javascript - 使用javascript while循环来制作变量?

Mysql 存储过程

c++ - Pimpl with smart ptr - 为什么需要构造函数/析构函数

c++ - 如何在C++的protobuf中从 `GzipInputStream`读取特定大小的消息?

c++ - std::function 的模板参数中 `const` 修饰符和引用的作用是什么

algorithm - 垂直于 3D 点集合的方向?

c++ - 在 C++ 中将队列复制到 vector 是错误的

opencv - opencv已触发为RtlValidateHeap指定的断点无效地址