C++ While循环在调用print函数后继续从stringstream获取用户输入

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

我的程序使用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 >> 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我做了一些格式更改,请查看最新的编辑。