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。