Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从控制台读取空格分隔的数字?_C++_Stl_Iostream - Fatal编程技术网

C++ 如何从控制台读取空格分隔的数字?

C++ 如何从控制台读取空格分隔的数字?,c++,stl,iostream,C++,Stl,Iostream,我试图做一个简单的任务,从控制台读取空格分隔的数字到向量,但我不知道如何正确地做到这一点 这就是我到目前为止所做的: int n = 0; vector<int> steps; while(cin>>n) { steps.push_back(n); } int n=0; 向量步长; while(cin>>n) { 步骤。向后推_(n); } 但是,这需要用户按下无效字符(如a)以在循环时中断。我不想要它 一旦用户输入像0 2 3 4 5这样的数字并按下Ente

我试图做一个简单的任务,从控制台读取空格分隔的数字到
向量
,但我不知道如何正确地做到这一点

这就是我到目前为止所做的:

int n = 0;
vector<int> steps;
while(cin>>n)
{
    steps.push_back(n);
}
int n=0;
向量步长;
while(cin>>n)
{
步骤。向后推_(n);
}
但是,这需要用户按下无效字符(如
a
)以在
循环时中断
。我不想要它

一旦用户输入像
0 2 3 4 5这样的数字并按下
Enter
我希望循环被中断。我也尝试过使用
istream\u迭代器
cin.getline
,但我无法让它工作

我不知道用户将输入多少元素,因此我使用的是
vector


请建议正确的方法。

使用
getline
结合
istringstream
提取数字

std::string input;
getline(cin, input);
std::istringstream iss(input);
int temp;
while(iss >> temp)
{
   yourvector.push_back(temp);
}

为了详细说明jonsca的答案,这里有一种可能性,假设用户忠实地输入有效整数:

string input;
getline(cin, input);

istringstream parser(input);
vector<int> numbers;

numbers.insert(numbers.begin(),
               istream_iterator<int>(parser), istream_iterator<int>());
字符串输入;
getline(cin,输入);
istringstream解析器(输入);
向量数;
number.insert(number.begin(),
istream_迭代器(解析器),istream_迭代器();

这将正确读取和解析来自
cin
的有效整数行。请注意,这是使用自由函数
getline
,该函数适用于
std::string
s,而不是
istream::getline
,该函数适用于C样式的字符串。

此代码应该可以帮助您,它将一行读取到一个字符串,然后对其进行迭代以获取所有数字

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

int main() {
    std::string line;
    std::getline(std::cin, line);
    std::istringstream in(line, std::istringstream::in);
    int n;
    vector<int> v;
    while (in >> n) {
        v.push_back(n);
    }
    return 0;
}
#包括
#包括
#包括
int main(){
std::字符串行;
std::getline(std::cin,line);
std::istringstream-in(行,std::istringstream::in);
int n;
向量v;
while(在>>n中){
v、 推回(n);
}
返回0;
}

在每个数字后提示用户,或提前进行数字计数并相应循环。
这不是一个好主意,但我在许多应用程序中都看到了这一点。

另外,如果您知道可以在完成输入后在命令行中按“ctrl-z”(仅限windows,类似unix的系统使用ctrl-d),可能会有所帮助。当您测试像这样的小程序时,应该可以帮助您,而不必键入无效字符。

但是该方法需要streamsize,我不知道。你能发布一个示例代码吗?哦..好的,我现在用@templatetypedef示例得到了它。您指的是自由函数
geline
,而不是
cin.getline
。#否则您将得到一个错误“istringstream iss具有初始值设定项,但类型不完整”,在类Unix系统上为Ctrl-d。