0

我的程序使用字符串流将数据存储到字符串向量中,该向量用于将值传递给打印函数。用户将从标准输入中输入 5 项,例如:summary DAL 2 5 54。然后按下回车键,我将这 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
}

任何建议将不胜感激

4

2 回答 2

4

看来你想要类似的东西

while (std::getline(...))
{
    // ...

    while (ss >> tmp)
        cmd.push_back(tmp);

    // ...

    summary(...);
}
于 2013-09-11T08:19:21.340 回答
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函数会将您的字符串转换为整数类型。

于 2013-09-11T08:46:45.227 回答