C++ While循环在调用print函数后继续从stringstream获取用户输入
我的程序使用stringstream将数据存储到字符串向量,该向量用于将值传递给打印函数。用户将从标准输入中键入5项,例如:summary DAL 2 5 54。然后按enter键,我取下这5项中的每一项,并将它们传递给汇总函数C++ While循环在调用print函数后继续从stringstream获取用户输入,c++,C++,我的程序使用stringstream将数据存储到字符串向量,该向量用于将值传递给打印函数。用户将从标准输入中键入5项,例如:summary DAL 2 5 54。然后按enter键,我取下这5项中的每一项,并将它们传递给汇总函数 string line; getline(cin, line); stringstream ss(line); string tmp; vector<string> cmd; int DOWN; int TOGO; int YDLINE; ss &g
string line;
getline(cin, line);
stringstream ss(line);
string tmp;
vector<string> cmd;
int DOWN;
int TOGO;
int YDLINE;
ss >> tmp; //BEGIN INPUT
while(ss)
{
cmd.push_back(tmp); //STORE TO VECTOR OF STRINGS
ss >> tmp;
}
ss.clear();
ss.str( cmd[2] );
ss >> DOWN; //CONVERT STRING TO INT
ss.clear();
ss.str( cmd[3] );
ss >> TOGO; //STRING TO INT
ss.clear();
ss.str( cmd[4] );
ss >> YDLINE; //STRING TO INT
summary(cmd[0], cmd[1], DOWN, TOGO, YDLINE, TeamData); //PASS VALUES TO PRINT FUNCTION
任何建议都将不胜感激您似乎想要
while (std::getline(...))
{
// ...
while (ss >> tmp)
cmd.push_back(tmp);
// ...
summary(...);
}
看来你想要像这样的东西
while (std::getline(...))
{
// ...
while (ss >> tmp)
cmd.push_back(tmp);
// ...
summary(...);
}
stringstream.clear()用于重置错误标志和不清除流,尽管它可能会给出结果,但其含义不应更改
#include<cstdlib>
char ch;
string line;
string buf;
bool check=true;
cout<<"Enter input\n";
while(1)
{
if(check == true)
{
cin>>line;
}
else break;
istringstream is(line);
// This will split the line based on whitespace
while(std::getline(is, buf, ' '))
{
cmd.push_back(buf);
// Checking if vector has 5 elements
if(cmd.size() == 5)
{
// Call function summary
summary(cmd[0], cmd[1], atoi(cmd[2].c_str()), atoi(cmd[3].c_str()),
atoi(cmd[4].c_str()), TeamData);
// Clear the vector list now
cmd.clear();
cout<<"Do you want to continue, enter y then"<<endl;
cin>>ch;
if(ch == 'y')
{
cout<<"Enter input"<<endl;
}
else
{
check=false;
break;
}
}
}
}
#包括
char ch;
弦线;
字符串buf;
布尔检查=真;
coutline;
}
否则就断了;
istringstream是(行);
//这将根据空格分割行
while(std::getline(is,buf',))
{
指令后推(buf);
//检查向量是否有5个元素
如果(cmd.size()==5)
{
//调用函数摘要
摘要(cmd[0],cmd[1],atoi(cmd[2].c_str()),atoi(cmd[3].c_str()),
atoi(cmd[4].c_str()),TeamData);
//现在清除向量列表
cmd.clear();
coutstringstream.clear()用于重置错误标志和不清除流,尽管它可能会给出结果,但其含义不应更改
#include<cstdlib>
char ch;
string line;
string buf;
bool check=true;
cout<<"Enter input\n";
while(1)
{
if(check == true)
{
cin>>line;
}
else break;
istringstream is(line);
// This will split the line based on whitespace
while(std::getline(is, buf, ' '))
{
cmd.push_back(buf);
// Checking if vector has 5 elements
if(cmd.size() == 5)
{
// Call function summary
summary(cmd[0], cmd[1], atoi(cmd[2].c_str()), atoi(cmd[3].c_str()),
atoi(cmd[4].c_str()), TeamData);
// Clear the vector list now
cmd.clear();
cout<<"Do you want to continue, enter y then"<<endl;
cin>>ch;
if(ch == 'y')
{
cout<<"Enter input"<<endl;
}
else
{
check=false;
break;
}
}
}
}
#包括
char ch;
弦线;
字符串buf;
布尔检查=真;
coutline;
}
否则就断了;
istringstream是(行);
//这将根据空格分割行
while(std::getline(is,buf',))
{
指令后推(buf);
//检查向量是否有5个元素
如果(cmd.size()==5)
{
//调用函数摘要
摘要(cmd[0],cmd[1],atoi(cmd[2].c_str()),atoi(cmd[3].c_str()),
atoi(cmd[4].c_str()),TeamData);
//现在清除向量列表
cmd.clear();
我想我们走对了,但它正在等待5个输入(按回车键)从用户那里而不是从5个项目。我很抱歉将其从我的原始帖子中删除。用户将从标准输入中键入5个项目,例如:summary DAL 2 5 54。然后按enter键,然后我将这5个项目中的每一个都传递到我的摘要功能我知道我们不应该说谢谢,但你保存了我的理智!th谢谢。我需要复习一下我对stringstream、getline等的知识,但现在我终于可以继续这个程序了!@GeorgeCostanza我做了一些格式更改,请检查最新的编辑。我认为我们的思路是正确的,但它正在等待5次输入(按enter键)从用户那里而不是从5个项目。我很抱歉将其从我的原始帖子中删除。用户将从标准输入中键入5个项目,例如:summary DAL 2 5 54。然后按enter键,然后我将这5个项目中的每一个都传递到我的摘要功能我知道我们不应该说谢谢,但你保存了我的理智!th谢谢。我需要复习一下我对stringstream、getline等的知识,但现在我终于可以继续这个程序了!@GeorgeCostanza我做了一些格式更改,请查看最新的编辑。