Форум программистов, компьютерный форум CyberForum.ru

считываю текстовый файл в строку, программа вылетает на ровном месте, почему? - C++

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,268
20.01.2012, 23:47     считываю текстовый файл в строку, программа вылетает на ровном месте, почему? #1
Друзья! Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <windows.h>
#include <vector>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>
#include <iterator>
using namespace std;
 
 
 
int main () {
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 string str;
 vector <string> v;
 vector <string>:: iterator it_0;
 
 
 
 ifstream i ("file.txt");
 
 while (getline (i, str)) {
  v.push_back(str);
 
  if (str== "bbb") {
   it_0= v.end()- 1; 
   printf ("произошло присваивание\n");
   cout<< *it_0<< endl;
  }
 
 }
 
 printf ("тут программа вылетает что называется\n");
 cout<< *it_0<< endl;
 getchar ();
 return 0;
}
А вот текстовый файл
C++
1
2
bbb
ccc
Считать-то я файл считаю, но почему программа вылетает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 23:47     считываю текстовый файл в строку, программа вылетает на ровном месте, почему?
Посмотрите здесь:

Деление чисел. Ошибка на ровном месте. Не пойму почему. C++
C++ Программа, считывающая заданный текстовый файл и выводящая на экран, а также дописывающая в новую строку в конец этого файла...
Ошибки на ровном месте (VS2010) C++
"error: expected unqualified-id at end of input" на ровном месте C++
Не создаётся объект string на ровном месте! Почему? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
20.01.2012, 23:54     считываю текстовый файл в строку, программа вылетает на ровном месте, почему? #2
Итератор становится недействительным после изменения вектора. Сначала считай весь файл, а потом ищи нужный элемент.
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
21.01.2012, 00:52     считываю текстовый файл в строку, программа вылетает на ровном месте, почему? #3
Судя из кода выше. Правда понять не могу зачем вектор, ну да ладно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
 
int main()
{
    std::vector <std::string> vec;
    std::string Str;
    std::ifstream fin("source.txt");
    if(fin)
        while(!fin.eof())
        {
            std::getline(fin, Str);
            vec.push_back(Str);
        }
    fin.close();
    std::cout<<"Pos = "<<std::find(vec.begin(), vec.end(), "bbb")-vec.begin()<<std::endl;
    system("pause");
    return 0;
}
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 00:57     считываю текстовый файл в строку, программа вылетает на ровном месте, почему? #4
а если строка не найдется? выведется 1. а если bbb будет второй строкой тоже выведется один.
так что по правильному надо все таки проверять результат поиска.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,268
21.01.2012, 00:58  [ТС]     считываю текстовый файл в строку, программа вылетает на ровном месте, почему? #5
Ну это всего лишь задание, существует практическая задача с такой же проблемой; я просто упростил код донельзя, он стал простым но нелогичным.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 01:02     считываю текстовый файл в строку, программа вылетает на ровном месте, почему? #6
ну тогда про невалидность итераторов вам рассказали.
если не хочется заморачиваться с невалидностью итераторов, заюзайте контейнер, у которого при вставке итераторы не протухают. например list.
Yandex
Объявления
21.01.2012, 01:02     считываю текстовый файл в строку, программа вылетает на ровном месте, почему?
Ответ Создать тему
Опции темы

Текущее время: 18:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru