使用字符串流填充整数向量

时间:2017-10-23 03:40:37

标签: c++

这是一个程序的代码片段,它要求循环中的输入相当笨重且难以筛选,因此我将帖子限制在此片段中。这应该是将一些整数的输入读入向量iin。 由于某种原因,当程序完成其第一个循环时,下一个要求字符的循环接收在第一个循环中输入的最后几个数字。我在循环开始时使用cin获取输入,所以不知何故我的字符串流的结尾在下一个循环开始时进入cin? 不知道从哪里开始。

我在这里看过很多执行相同策略的帖子,但我看不到那些我错过的帖子的任何部分。

        cout << "Please enter command parameters: ";
        string in;
        int temp;
        cin >> in;
        istringstream input(in);
        while(input>>temp){
            iin.push_back(temp);
            input.clear();
        }

很抱歉没有提供正确的示例代码。

下面:

#include <iostream>
#include "Functions.h"
#include <fstream>
#include <cstring>
#include <vector>
#include <sstream>
using namespace std;
bool quit=false,filewrite=false,filein=false;
char cmd;
std::vector<int> iin;
std::vector<double> din;


extern ofstream ofile;
extern ifstream ifile;

int main(){
    while(!quit){
        cout << "Please enter command code: ";
        cin >> cmd;
        cout << "Please enter command parameters: ";
        string in;
        int temp;
        cin >> in;
        istringstream input(in);
        while(input>>temp){
            iin.push_back(temp);
            input.clear();
        }
        // call functions after, one of them will trigger quit
}
}

运行此代码会为我生成this

抱歉,我还没有能力嵌入。

OK!我已经解决了。

已经实现了我的输入有空格所以只收到第一个字符,正如评论中指出的那样。这样:

            cout << "Please enter command parameters: ";
            char inp[256];
            int temp;
            cin.getline(inp,256);
            string strin(inp);
            istringstream ss(strin);
            while(ss>>temp){
                cout << temp << endl;
                iin.push_back(temp);
            }

给我正确的结果。最初这种方法不起作用,因为我之前使用过cin,这导致我需要使用cin.ignore()来清除缓冲区。由于我几乎没有提出解决方案,但对这个解释不太确定,但希望它对某些人有用。干杯!

2 个答案:

答案 0 :(得分:0)

如果你知道你只是获得了int,那么格式化输入怎么样呢。

int i; cin >> i; v.push_back(i);

或c风格

int i; Scanf("%d", &i); v.push_back(i);

答案 1 :(得分:-2)

string in;
        int temp;
        cin >> in;
        istringstream input(in);
        while(input>>temp)

此处您使用两种数据类型,一种是string,另一种是integer。您在输入中使用字符串,然后比较input变量中的integer。首先,您不要使用任何数字初始化temp变量,然后您无法将stringinteger进行比较。

希望你理解你的错误。