std :: stoi вне диапазона. Преобразование из файла

Я пытаюсь напечатать строку, которая указана на каждой строке в файле, но возвращает исключение вне диапазона при использовании std :: stoi. Текстовый файл имеет одно число в каждой строке от 10 в первой строке до 0 в конце. Вот почему я не понимаю, почему это вне диапазона, так как он должен работать с 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";

Не могли бы вы объяснить мне, почему это происходит?

Заранее благодарю за любую помощь.

0

Решение

Попробуй это.

  1. передать один строковый параметр стои (строки);

Если это не работает

  1. поместите это перед стои: lines.append («»);

Если все еще ошибка, то

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

Я думаю, что проблема в том, прежде чем стои вернет значение. Стои попытается найти позицию следующего символа первого числа. и назначьте его указателю, который будет выходить за пределы, если после числа нет символа.
так что либо вы добавляете дополнительный индекс, добавляя любой символ, либо пытаетесь использовать один параметр.

0

Другие решения

Попробуй использовать станд :: stoul () функция. Разбирает без знака долго значения и, вероятно, имеет больший диапазон (зависит от процессора / ОС). В Windows у меня была проблема с разбором без параметра index, так что на всех это может выглядеть так std::stoul(line, 0), Существует std :: stoull для без знака длинный длинный или.

0

По вопросам рекламы [email protected]