1

istream& getline ( istream& is, string& str ); を呼び出す while ループの WTF を不思議に思っています。同じ行を繰り返し読み続けます。getline を呼び出す次の while ループ (他の while ループと if ステートメントのいくつかのレベルにネストされている) がありますが、while ループのコード ブロックの最初のコード行である私の出力ステートメントは、同じ行を読み込んでいることがわかります。これは、プログラムが終了したときに出力ファイルに正しいデータが含まれていない理由を説明しています。

while (getline(file_handle, buffer_str)) {
      cout<< buffer_str <<endl;
      cin.get();
      if ((buffer_str.find(';', 0) != string::npos) && (buffer_str.find('\"', 0) != string::npos)) { //we're now at the end of the 'exc' initialiation statement
         buffer_str.erase(buffer_str.size() - 2, 1);
         buffer_str += '\n';
         for (size_t i = 0; i < pos; i++) {
             buffer_str += ' ';
         }
         buffer_str += "throw(exc);\n";
         for (size_t i = 0; i < (pos - 3); i++) {
             buffer_str += ' ';
         }
         buffer_str += '}';
      }

      else if (buffer_str.find(search_str6, 0) != string::npos) { //we're now at the second problem line of the first case
         buffer_str += " {\n";
         output_str += buffer_str;
         output_str += '\n';
         getline(file_handle, buffer_str); //We're now at the beginning of the 'exc' initialiation statement
         output_str += buffer_str;
         output_str += '\n';

         while (getline(file_handle, buffer_str)) {
               if ((buffer_str.find(';', 0) != string::npos) && (buffer_str.find('\"', 0) != string::npos)) { //we're now at the end of the 'exc' initialiation statement
                 buffer_str.erase(buffer_str.size() - 2, 1);
                 buffer_str += '\n';
                 for (size_t i = 0; i < pos; i++) {
                     buffer_str += ' ';
                 }
                 buffer_str += "throw(exc);\n";
                 for (size_t i = 0; i < (pos - 3); i++) {
                     buffer_str += ' ';
                 }
                 buffer_str += '}';
               }

               output_str += buffer_str;
               output_str += '\n';

               if (buffer_str.find("return", 0) != string::npos) {
                  getline(file_handle, buffer_str);
                  output_str += buffer_str;
                  output_str += '\n';
                  about_to_break = true;
                  break; //out of this while loop
               }
         }
      }
      if (about_to_break) {
         break; //out of the level 3 while loop (execution then goes back up to beginning of level 2 while loop)
      }
      output_str += buffer_str;
      output_str += '\n';
}

この問題のため、ループ内の if ステートメントと else ステートメントが正常に機能せず、必要なときにループから抜け出せません (ただし、最終的にはループから抜け出しますが、ループから抜け出すことはできません)。正確な方法はまだわかりません)。

誰でもこの問題を引き起こしている可能性があることを知っていますか??

前もって感謝します。

4

0 に答える 0