如何通过getline()和stringstream获取我的字符串命令

时间:2015-06-02 11:57:03

标签: c++ getline stringstream

我想知道我是否使用正确的表单将命令排成一行,然后由某些if获取每个命令所需的信息。这是我的代码的一部分;实际上,我main函数的第一部分:

string line;
stringstream ss;

while (!cin.eof())
{
    getline(cin, line);
    //i dont know if next line should be used   
    ss << line;
    if (line.size() == 0)
        continue;

    ss >> command;

    if (command == "put")
    {
         string your_file_ad, destin_ad;
         ss >> your_file_ad >> destin_ad;
         //baraye history ezafe shod
         give_file(your_file_ad, p_online)->index_plus(command);

1 个答案:

答案 0 :(得分:-1)

我尝试在cout中使用另外两个if来运行您的代码,以查看用户输入put a b时会发生什么。

所以,这是我的代码:

string line;
stringstream ss;
while (true)
{
    getline(cin, line);
    //i dont know if next line should be used   

    ss << line;
    if (line.size() == 0)
        continue;

    string command;
    ss >> command;

    if (command == "put")
    {
        string your_file_ad, destin_ad;
        ss >> your_file_ad >> destin_ad;
        cout << "input #1 is " << your_file_ad << endl;
        cout << "input #2 is " << destin_ad << endl;
    }
}

当我运行此代码时,如果我在控制台中编写put a b,我会看到这个结果,这是正确的:

input #1 is a
input #2 is b

但似乎适用于第一个命令。之后,命令无法正确处理。

所以,我再次阅读了代码,发现问题是,您正在暂时初始化stringstream

我不确定为什么它不起作用(可能已经达到了EOF并且不能再继续阅读了?),但是如果你在一段时间内移动stringstream ss;,那么&# #39; ll正常工作:

string line;
while (true)
{
    stringstream ss;

    getline(cin, line);
    //i dont know if next line should be used   

    ss << line;
    if (line.size() == 0)
        continue;

    string command;
    ss >> command;

    if (command == "put")
    {
        string your_file_ad, destin_ad;
        ss >> your_file_ad >> destin_ad;
        cout << "input #1 is " << your_file_ad << endl;
        cout << "input #2 is " << destin_ad << endl;
    }
}

enter image description here

更新:阅读下面关于第一个代码问题的@LightnessRacesinOrbit评论。