这是一个程序的代码片段,它要求循环中的输入相当笨重且难以筛选,因此我将帖子限制在此片段中。这应该是将一些整数的输入读入向量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()来清除缓冲区。由于我几乎没有提出解决方案,但对这个解释不太确定,但希望它对某些人有用。干杯!
答案 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
变量,然后您无法将string
与integer
进行比较。
希望你理解你的错误。