不幸的是this没有帮助...

我有一个在实施时会引发异常的软件,但我需要知道如何避免这种情况。这是具体部分:

if (!(iss >> c)) {
    throw std::runtime_error(
        "No return code: status line doesn't begin with return code");
}


这就是整个方法。

void parseReply(std::ostream& os, std::istream& is, std::string &strReturn) {

std::string s;
int     c;

while (std::getline(is, s)) {
    strReturn += s;
    strReturn += '\n';

    std::istringstream iss(s);
    if (!(iss >> c)) {
        throw std::runtime_error(
            "No return code: status line doesn't begin with return code");
    }

    if (CODE_OK == c
        || CODE_ERROR == c
        || CODE_BUSSY == c
        || CODE_UNKNOWN_CMD == c
        ) {
        break;
    }
}

if (CODE_OK != c
    &&  CODE_UNKNOWN_CMD != c
    &&  CODE_BUSSY != c
    )  {
    throw std::runtime_error("error: " + s);
}

while (is >> s) {
    flyelite::util::chop(s);
    strReturn += s;
    if (">" == s) {
        return;
    }
}

return;


该方法解析tcp消息答案的数据内容。每条消息都以“>”字符确认。

现在的问题是,有时(通常在循环中有许多消息时)iss的内容是:


  “> 250好吧”


正确的格式是


  “ 250好吧”



(iss >> c)的第一个内容是“>”时,为什么false返回iss
发件人是否有可能在回答中返回第二个“>”?


提前致谢

最佳答案

当iss的第一个内容是“>”时,为什么(iss >> c)返回false?


当读入的字符为“>”时,iss >> c返回false,因为它期望一个整数,并且想要将值赋给变量c,而找不到该整数时,则istream进入错误状态。


  发件人是否有可能在回答中返回第二个“>”?


您可能在“状态”中看到的(由于上述原因)您可能无法读取的输入流中的剩余值

09-07 06:36