cin 直接到向量<int>,当没有更多数据时断开循环
cin directly to vector<int>, break loop when no more data
下面的代码运行并将输入存储在vector中,但会无限循环地侦听输入。目的是从一行输入中取一个字符串ints
,用空格分隔,并将它们存储在一个向量中。
int main(int argc, char ** argv){
int input;
vector<int> intVector;
while (cin >> input)
intVector.push_back(input);
//print vector contents
copy(intVector.begin(), intVector.end(), ostream_iterator<char>(cout, " ")); cout << "n";
return 0;
}
我想以某种方式在while循环中添加一个简单的,额外的条件,检查行结束,这样它就不会无限期地继续侦听。cin.oef
在这里没有用。我已经试过了。
我可以添加一些干净,简短,优雅的内容来解决这个问题吗?
vector<int> intVector( std::istream_iterator<int>( std::cin ),
std::istream_iterator<int>() );
您可以使用sstream
lib:
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
#include <iterator>
using namespace std;
int main(int argc, char ** argv) {
string buf;
while(getline(cin, buf)) {
istringstream ssin(buf);
vector<int> intVector;
int input;
while(ssin >> input) {
intVector.push_back(input);
}
//print vector contents
cout << intVector.size() << endl;
copy(intVector.begin(), intVector.end(), ostream_iterator<int>(cout, " "));
cout << "n";
}
return 0;
}
如果您希望避免错误,例如在整数变量中插入一个字符,您可以这样做:
while (some condition) {
if (!(std::cin >> int_variable)) {
std::cin.clear();
std::cin.ignore(1024, 'n');
} else {
array.push_back(int_variable);
// Anything else or increment the condition variable
}
}
相关文章:
- 删除功能不适用于串行通信后多个循环中的多个实例
- 在PROGMEM中添加更多数据会中断Arduino Mega 2560上的SPI传输
- 何时使用 if 语句选择多个循环而不是单个循环
- 结构内具有更多数据类型的单个链表
- 在 C++ 的 iov 中存储更多数据
- 在满足条件时中断多个循环,而无需使用 goto (C++)
- C 和卷发:无法接收握手,需要更多数据
- C++使用sql连接器获取元数据,而不需要太多数据
- 多声明循环
- C++简体版链表,当我加载数据以创建链表并输入更多数据时,似乎存在差距
- 将多个循环转换为一个递归
- Vtk检查多数据对象是否相交
- C++链表实现多数据插入
- 多个循环依赖项c++
- 具有双重调度的C++多态循环函数
- MOVL多数据指令与装配优化对比
- C++多次使用更多数据缓冲区
- 读取svm数据并使用更多数据进行再训练
- hiredis,如何检查是否有更多数据可供读取
- cin 直接到向量<int>,当没有更多数据时断开循环