MSVK95 Ответов: 2

Преодоление утверждения "строковый индекс вне диапазона" при чтении файла


Привет,
Мне нужно прочитать данные из файла "sample.txt-и храните определенные строки в другом файле. sample.txt имеет около 6000 строк, и строки, начинающиеся с"$", должны быть сохранены в другом файле.
Однако, когда указатель файла (для операции чтения) достигает eof, он запускает сообщение об ошибке утверждения - строковый индекс вне диапазона.
Есть идеи по преодолению этого утверждения?
Заранее спасибо !

Что я уже пробовал:

код:

ifstream fi;
потока из;
строка str;
интернет.открытые( "sample.txt", ios_base::бинарные );
из.открытые( "output.txt", ios_base::бинарные );
хотя ( ! интернет.ВФ() )
{
Гэтлину( ул. интернет, );
if (str[0] =='$' )
{
из< & lt;str;
из< & lt; " \n";
}
}
интернет.рядом();
из.рядом();


P. S : sample.txt и output.txt уже созданы.

2 Ответов

Рейтинг:
15

Patrice T

if( str[0] == '$' )

Вот Держи пари что str содержат не менее 1 символа, что не доказано.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


MSVK95

Большое спасибо за ваше предложение. Действительно, была проблема с str[0] =='$'. Поэтому я заменил его строковым свойством-str. find_first_of ('$'), и оно работает..

Рейтинг:
1

OriginalGriff

Это основная проблема, которая требует рассмотрения во время выполнения кода, а это означает доступ к вашим входным данным, которых у нас нет. И использовать отладчик, чтобы точно следить за тем, что происходит, чего мы не можем сделать отсюда.

Так что все будет зависеть от вас.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!