Я пытаюсь напечатать строку, которая указана на каждой строке в файле, но возвращает исключение вне диапазона при использовании 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";
Не могли бы вы объяснить мне, почему это происходит?
Заранее благодарю за любую помощь.
Попробуй это.
- передать один строковый параметр стои (строки);
Если это не работает
- поместите это перед стои: lines.append («»);
Если все еще ошибка, то
string::size_type sz;
stoi(lines,sz);
Я думаю, что проблема в том, прежде чем стои вернет значение. Стои попытается найти позицию следующего символа первого числа. и назначьте его указателю, который будет выходить за пределы, если после числа нет символа.
так что либо вы добавляете дополнительный индекс, добавляя любой символ, либо пытаетесь использовать один параметр.
Попробуй использовать станд :: stoul () функция. Разбирает без знака долго значения и, вероятно, имеет больший диапазон (зависит от процессора / ОС). В Windows у меня была проблема с разбором без параметра index, так что на всех это может выглядеть так std::stoul(line, 0)
, Существует std :: stoull для без знака длинный длинный или.