Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,496
#1

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

20.01.2012, 23:47. Просмотров 608. Ответов 5
Метки нет (Все метки)

Друзья! Вот код
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
Считать-то я файл считаю, но почему программа вылетает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 23:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос считываю текстовый файл в строку, программа вылетает на ровном месте, почему? (C++):

Не создаётся объект string на ровном месте! Почему? - C++
Ребята, чё-то я не пойму: #include &lt;string&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main () { char...

Деление чисел. Ошибка на ровном месте. Не пойму почему. - C++
Пишу задачу, где нужно вычислить простое выражение. И возникает проблема при делении 1 на другие числа. Код ниже: //вычисление формулы ...

Ошибки на ровном месте (VS2010) - C++
В общем, сделал класс разбитый на два файла (.h и .cpp). Часть методов этого класса определена прямо в его теле при его объявлении (т.е. в...

Программа, считывающая заданный текстовый файл и выводящая на экран, а также дописывающая в новую строку в конец этого файла... - C++
Написать программу, считывающую заданный текстовый файл (например, TEST.txt) и выводящую на экран, а также дописывающую в новую строку в...

Почему программа вылетает - C++
Здраствуйте, почему, когда пишу: unsigned char* p = new unsigned char; программа НЕ вылетает, а когда пишу: unsigned char p; ...

Строка (почему вылетает программа?) - C++
Подскажите пожалуйста почему вылетает программа, вроде всё правильно написано. Вылетает на строчке string = string; # include...

5
NoMasters
Псевдослучайный
1766 / 1108 / 74
Регистрация: 13.09.2011
Сообщений: 3,153
20.01.2012, 23:54 #2
Итератор становится недействительным после изменения вектора. Сначала считай весь файл, а потом ищи нужный элемент.
1
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 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;
}
1
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 00:57 #4
а если строка не найдется? выведется 1. а если bbb будет второй строкой тоже выведется один.
так что по правильному надо все таки проверять результат поиска.
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,496
21.01.2012, 00:58  [ТС] #5
Ну это всего лишь задание, существует практическая задача с такой же проблемой; я просто упростил код донельзя, он стал простым но нелогичным.
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 01:02 #6
ну тогда про невалидность итераторов вам рассказали.
если не хочется заморачиваться с невалидностью итераторов, заюзайте контейнер, у которого при вставке итераторы не протухают. например list.
0
21.01.2012, 01:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 01:02
Привет! Вот еще темы с ответами:

Почему вылетает программа на delete [] - C++
Здравствуйте, подскажите, пожалуйста, что именно не так и как исправить. Программа вылетает сразу же на деструкторе,т.е на delete . Хотя,...

Вылетает программа. Не пойму, почему? - C++
Здравствуйте. Написал прогу на С++ - это лаба по ООП. Но она вылетает. Не пойму почему! // объявление класса Date #include &lt;iostream&gt; ...

"error: expected unqualified-id at end of input" на ровном месте - C++
Собственно вот код - ничего сложного, пример элементарной вложенной косвенности: #include &lt;iostream&gt; using namespace std; int...

Программа на С++ вылетает, не могу понять почему!? - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;allegro.h&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; #define W...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.