vector<int> a;
vector<int> b;
int temp_holder;
cout << "\n Give the first ints \n" ;
while (cin >> temp_holder)
a.push_back(temp_holder);
cout << "\n Give the second ints \n";
while (cin >> temp_holder)
b.push_back(temp_holder);
当我按ctrl + z
进行第一次while循环时,第二次也会自动结束。发生了什么以及如何解决这个问题,这是使用while(cin >> var);
来将值转换为向量的最有效方法
谢谢!
答案 0 :(得分:2)
使用
std::cin.clear();
循环之间的。
答案 1 :(得分:0)
当我按下第一个while循环的ctrl + z时,第二个也会自动结束。
CTRL + Z 使cin
流状态无效(位于eof
)。因此任何进一步的调用,如
cout << "\n Give the second ints \n";
while (cin >> temp_holder)
b.push_back(temp_holder);
会失败。
您可以使用std::getline()
分别获取第一组和第二组整数值。这需要输入一个空格分隔的数字组,并让用户按 ENTER 键表示输入了整个数组。
然后,您可以根据需要使用std::istringstream
将数字提取到矢量。
答案 2 :(得分:0)
你的策略存在缺陷。
第一个while
循环只有在没有输入或输入中出现错误时才会结束。
您可以依赖错误来中断循环,清除流的错误状态,忽略该行的其余部分,然后继续读取第二个{{1}中第二个vector
的元素循环。
while
使用此方法,您可以使用
cout << "\n Give the first ints \n" ;
while (cin >> temp_holder)
a.push_back(temp_holder);
// If EOF is reached, there is nothing more to read.
if ( cin.eof() )
{
// Deal with EOF.
}
// Clear the error state.
cin.clear();
// Ignore the rest of the line.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// Continue to read the elements of the second vector.
cout << "\n Give the second ints \n";
while (cin >> temp_holder)
b.push_back(temp_holder);
作为您的输入。 1 2 3 4 5
xxxx
10 20 30 40 50
之前的数字将被读取并存储在第一个向量中,而xxxx
之后的数字将被读取并存储在第二个向量中。