我的程序使用字符串流将数据存储到字符串向量,用于将值传递给打印函数。用户将从标准输入中键入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 >> 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(ss >> tmp)
{
while(ss)
{
cmd.push_back(tmp);
ss >> tmp;
}
. . .
. . .
summary(cmd[0], cmd[1], DOWN, TOGO, YDLINE, TeamData); //PASS VALUES TO PRINT FUNCTION
}
非常感谢任何建议
答案 0 :(得分:4)
似乎你想要像
这样的东西while (std::getline(...))
{
// ...
while (ss >> tmp)
cmd.push_back(tmp);
// ...
summary(...);
}
答案 1 :(得分:2)
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;
}
}
}
}
atoi 函数会将您的字符串转换为整数类型。