可以有多个同时(cin>>输入)
Possible to have multiple while (cin>>input)
我想知道是否有可能拥有多个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向量集合中元素的个数和每个元素的值。
然而,我意识到在输入第一个向量的第一组数字后(以EOF结束),我无法输入第二个向量的第二组数字,程序立即终止。我怀疑EOF意味着第一个向量的第一个cin也被第二个向量的第二个cin处理了。
是否有任何方法可以让上面的程序正确运行,即有多个while (cin)?
当你做while (cin>>input)
时,你有效地要求输入流cin
产生整数,直到流坏了(即遇到EOF,蒸汽无法将用户的输入转换为整数,或者可能有另一个问题)。
循环结束后,流的状态仍将处于导致它停止循环的任何状态。为了继续从cin
读取,直到遇到另一个EOF令牌,您需要首先清除EOF失败位,这可以通过使用cin.clear()
来完成(如π α ντα ρ ε ν所指出的)。但是,您应该首先检查cin
的状态,以防由于其他原因(可能用户输入了一个单词而不是一个数字)导致输入失败。
两个选项可能是:检查只设置了eof位,或者只取消eof位:
if (cin.eof())
{
std::cout << "Yay, reached an EOF" << std::endl;
}
cin.clear(std::ios_base::eofbit);
您需要在以EOF结束后调用cin.clear();
(即CTRL-D或CTRL-Z),以再次重用它。
这个while循环一直读到文件的末尾。在结束之后没有更多的内容,因此任何进一步的读取都将失败。
你必须设计另一种方式,使你的程序知道(即,有一个条件)当第一组数字完成时。
通常有两个选项:
-
先读取值的个数
int count; std::cin >> count; for (int i = 0; i < count; i++) { std::cin >> input; v1.push_back(input); } // read into v2 …
-
或有一个分隔值,即一个无效的特殊值。在这种情况下,我将把负数视为无效。
std::vector<int> *v_input = &v1; // first read to v1 while (std::cin << input) { if (input >= 0) v_input->push_back(input); else { // invalid value, thus push numbers to the next vector if (v_input == &v1) v_input = &v2; else // invalid value while reading values for v2 - do not read any more lines break; } }
然而,你也可以先将整行作为字符串读取并测试,例如,字符串是否为空。如果是,请输入v2
,而不是v1
。如果输入不为空,则转换为int并压入当前向量
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- EASTL矢量<向量<int>>连续的
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- 将 cin 限制为只有一个
- cin >> int 给定一个字符串将 int 赋值为 0
- istream std::cin如何修改自定义istream缓冲区
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- cin 的十进制输入验证?
- Turbo C++ cin() 不能与 gets() 一起使用
- 使用 cin 时接受小数点后的 2 位数字
- 在 std::getline 和 std::cin 期间卡在循环中
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- C++ cin.ignore() 跳过循环
- CIN是逻辑1还是0?
- 如何运行多行 cin?