0

ファイルの各行に示されている行を印刷しようとしていますが、std::stoi の使用中に範囲外の例外を返します。テキスト ファイルには、最初の行の 10 から最後の 0 までの各行に 1 つの数字があります。それがintで動作するはずなので、なぜ範囲外なのか理解できないので、32ビットです。

これが私のコードです:

  if (myfile.is_open()){
    while ( getline (myfile,line) ){
        DirLine = myfile.tellg();
        myfile.seekg(0,0);
        i=0;
        lines = line;
        while (fl){
            j = std::stoi(lines,nullptr,10);
            if (j == i){
                cout << lines <<" - "<<j << '\n';
                myfile.seekg(0,DirLine);
                fl = false;
            }
            getline(myfile,lines);
            i++;
        }
    }
    myfile.close();
  } 
  else cout << "Unable to open file";

なぜこれが起こっているのか説明していただけますか?

助けてくれてありがとう。

4

2 に答える 2

0

これを試して。

  1. 1 つの文字列パラメータを渡します。stoi(lines);

うまくいかない場合

  1. これを stoi の前に置きます: lines.append(" ");

それでもエラーになる場合

string::size_type sz;
stoi(lines,sz);

問題は、stoi が値を返す前にあると思います。stoi は、最初の数字の次の文字の位置を見つけようとします。数字の後に文字がない場合は範囲​​外になるポインターに割り当てます。そのため、任意の文字を追加して追加のインデックスを与えるか、単一のパラメーターを使用しようとします。

于 2016-03-04T05:22:49.643 に答える