C++ c++;从控制台读取整数数组

C++ c++;从控制台读取整数数组,c++,input,console,C++,Input,Console,因此,当我从控制台读取一些数字时,我一直试图摆脱一个无限循环。这是读取的部件代码: vector<int> all; string input; while (getline(cin, input)) { int number; stringstream ss(input); while (ss >> number) { all.push_back(number); } } vectorall; 字符串输入; while(

因此,当我从控制台读取一些数字时,我一直试图摆脱一个无限循环。这是读取的部件代码:

vector<int> all;
string input;
while (getline(cin, input)) {
    int number;
    stringstream ss(input);
    while (ss >> number) {
        all.push_back(number);
    }
}
vectorall;
字符串输入;
while(getline(cin,输入)){
整数;
字符串流ss(输入);
while(ss>>编号){
全部。推回(编号);
}
}
我也试过这个:

vector<int> all;
while (cin >> number) {
    all.push_back(number);
}
vectorall;
而(cin>>编号){
全部。推回(编号);
}

解决此问题的快速方法是在从控制台输入空行时中断外部循环:

while (getline(cin, input))
{
   if (input == "")
       break;
    ...
}

注意:某些实现在getline中的行尾返回回车符,它只在新行(换行符)上加条纹

如前所述,这是一种非常简单、快速的退出无限循环的方法,从用户的角度来看,他/她可以输入由空格、制表符、enter或任何组合分隔的数字,并且将填充向量,直到用户输入空行

您的代码如下所示:

#include <string>
#include <vector>
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
    vector<int> all;
    string input;
    while (getline(cin, input)) {
        if (input == "")
            break;
        int number;
        stringstream ss(input);
        while (ss >> number) {
            all.push_back(number);
        }
    }
    // Here the vector "all" has any numbers entered by user
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
矢量all;
字符串输入;
while(getline(cin,输入)){
如果(输入==“”)
打破
整数;
字符串流ss(输入);
while(ss>>编号){
全部。推回(编号);
}
}
//这里的向量“all”包含用户输入的任何数字
返回0;
}

我很困惑。我的方法是否适合将所有输入数字放入我的all向量中。“一些实现在getline中的行末尾返回回车符”-不,它们不返回。“不,它们不”,实际的最新实现不返回回车符,答案是这样的,但一些嵌入式系统(在控制系统中已经发生过多次)对于旧的实现,并且在行终止的环境中工作,移除结束行馈送(ASCII 10或0A十六进制)并保留回车符(ASCII 13或0D十六进制),因此必须进行如下比较:if(input==“\r”)break;“我很困惑。我的方式是否适合将所有输入的数字放入我的所有向量中。”,这取决于输入的用途和性质,如果输入的所有数据都是向量元素,以某种方式进行处理,就可以了。如果这些值是异构的,考虑询问用户你在等待什么类型,并在不同的变量(向量、数量、限制等)中接收它。与第二个例子一起,并向控制台输入EOF字符(共同的EOF字符是CTRL D或CTRL Z)。