2017-06-19 14 views
0

残念ながらthisは、私が実装されるような例外をスローするソフトウェアを持っていますが、私はそれを避ける方法を知っておく必要があります...istringstream演算子>>戻り値

有用ではなかったです。具体的な部分は次のとおりです。

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の場合は ">"ですか?
  • 送信者が返信で2番目の「>」を返す可能性はありますか?

ISSの最初の内容は ">" であるとき、事前に感謝

答えて

2

はなぜ(ISS >> c)はfalseを返すのですか?読み取った文字が「>」である場合、それは整数を期待し、そのような整数を見つけることができない場合、変数cに値を代入したいされているので

iss >> cは、偽を返します。 istreamはエラー状態になります。

送信者が回答に2番目の「>」を返す可能性はありますか?

それはちょうどあなたがあなたの「状態」

+1

おかげ@Curiousに見ていること、ので(理由は上記の理由で)あなたが読むことができなかったことを、入力ストリームからの値の上に残されそうですoperator >>は 'target'型に敏感です... nice –