while循环不等待方法完成

时间:2014-02-11 21:52:20

标签: c++

因为我在C ++中做了一些事情已经有一段时间了,但是我的while循环中出现了一个非常奇怪的行为。它旨在允许用户执行无限数量的命令,并确定通过字符串的内容执行哪些命令。

以下是感兴趣的代码:

    string run;
    size_t found;
    bool understood;
    while (true)
    {
          run = "";
          found = string::npos;
          cout << "Please enter command(s)" << endl;
          cout << "\> ";
          cin >> run;
          found = run.find("convert");
          cout << found << endl;
          understood = false;
          if (found != string::npos) 
          {
                  cout << "Converting DNA" << endl;
                  understood = true;
                  convert();
          }
          found = run.find("purify");
          if (found != string::npos)
          {
                  cout << "Purifying DNA" << endl;
                  purify();
                  understood = true;
          }
          found = run.find("build");
          if (found != string::npos)
          {
                  cout << "Building overlaps" << endl;
                  buildOverlaps();
                  understood = true;
          }
          found = run.find("close");
          if (found != string::npos)
          {
                    cout << "Goodbye" << endl;
                    break;
          }
          if (understood == false) cout << "I'm sorry, I didn't understand you" << endl;
    }

我从原来的方法移动了,如果string ==“string”则涉及到该方法,这样多条命令就可以由同一行执行。但是,当我运行这个新代码时,我得到了

Please enter command(s)
> run converter
(some long, nonzero, number)
I'm sorry, I didn't understand you
Please enter command(s)
> 0
Converting DNA

所以基本上,它似乎接受字符串,跳过if块(除了最后一个),然后回绕并执行适当的方法。这一切都有效,所以这只是一个小麻烦,但我想了解这种行为。

这些数字是找到的字符串索引的调试输出,在非测试执行中不存在。

2 个答案:

答案 0 :(得分:2)

如果你的输入是

> run converter

然后你获得输入的方式

cin >> run;

不适用于你(operator>>在空白处打破)。它第一次通过循环,它将尝试找到一个“运行”字符串,然后它将再次尝试找到一个“转换器”字符串。如果你想处理整行,你应该做

std::getline(std::cin, run);

答案 1 :(得分:0)

您应在每个continue;块的末尾添加if(found != string::npos)

这样,如果它执行了块,它会跳过另一个块,如果阻塞并重新启动while循环。