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

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

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Построчное считывание файла txt в массив - C++

29.08.2013, 14:53. Просмотров 1204. Ответов 9
Метки нет (Все метки)

Добрый день.

Пытаюсь вспомнить "как там считывать из файла", вроде бы делала, но давно это было.
Сейчас сижу, кручу-верчу, а понять не могу -- почему не работает?

Суть программы такая: есть файл hero.txt, в этом файле есть 5 строчек

герой 1
герой 2
герой 3
герой 4
герой 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
40
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <string> 
#include <Windows.h>
#include <ctime> 
 
using namespace std; 
 
int main() 
{ 
    //SetConsoleCP(1251);
    //SetConsoleOutputCP(1251);
    setlocale(0,""); 
 
    int i=0;
    string Hero[10];
 
 
    // чтение файла и вывод на экран
    // объявление переменной
    ifstream in_file;
    in_file.open("hero.txt");
 
        // пока не конец файла
        while (!in_file.eof())
        {
            in_file >> Hero[i];
 
            // вывод считанной переменной на экран
            cout << Hero[i] << endl;
            i++;
        }
    // закрытие потока
    in_file.close();
 
    cin.get(); 
    return 0; 
}
И у меня цикл while уходит в какую-то бесконечность... Хотя в файле строго 5 строчек. Что делать и как быть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 14:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построчное считывание файла txt в массив (C++):

Построчное считывание файла - C++
В файле у меня все строки вида: \x53\x74\x69\x6C\x6C\x2E\x2E\x2E\x00 Код считывающий файл построчно: ifstream i(&quot;first.dlg&quot;); string...

Построчное считывание файла - C++
Всё, я совсем запуталась. Помогите пожалуйста!!! Есть файл, который нужно считать. Но каждая его строка должна быть считана в...

Построчное считывание файла - C++
поделитесь готовой функцией или способом, с помощью которого можно считать с текстового файла ПОСТРОЧНО данные разных типов. например,...

Построчное считывание из файла - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;malloc.h&gt; typedef struct { double x1; double y1; double x2; ...

Построчное считывание из файла - C++
Всем привет! Функция, которая считывает из файла значения и помещает их в массив. Проблема в том, что даже из файла не читает :-(...

Построчное считывание матрицы из файла - C++
Написал код ifstream fout(&quot;1.txt&quot;); if (fout.is_open()) { int i,j, N=0; fout&gt;&gt;N; //Считываю значение N ...

9
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.08.2013, 15:02 #2
Nullik, Используйте std::getline.
C++
1
in_file >> Hero[i];
Должно быть
C++
1
std::getline(in_file, Hero[i]);
1
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
29.08.2013, 15:03 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
#include <fstream>
 
int main() {
    std::vector< std::string > name;
    std::fstream file( "hero.txt" );
    
    std::string temp;
    while( !file.eof() ) {
        std::getline( file, temp );
        name.push_back( temp );
        std::cout << temp << std::endl;
    }
    return 0;
}
1
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
29.08.2013, 15:26  [ТС] #4
ForEveR, заменила так, как вы сказали, пишет вот что:

Необработанное исключение в "0x67f61f68 (msvcp100d.dll)" в "Random story 1.1.0.0.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Ошибок нет, только при запуске, видимо, цикл while ушёл всё же в бесконечность.

coloc, на сколько я поняла, вы считываете сначала в переменную, потом эту переменную в массив (я потом хочу сделать динамический массив, можно и вектор, не принципиально). А можно ли сразу записать в массив избегая создания ещё одной переменной?
*точно, ещё дна переменная)) -- взяла ваш вариант на заметку

Добавлено через 9 минут
О госспади, решила проблему!
Оказывается, я не туда поместила файл hero.txt (он был в папке debug), а надо было в папку с именем проекта)))

ForEveR, большое спасибо, всё работает корректно!
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2013, 17:06 #5
Цитата Сообщение от Nullik Посмотреть сообщение
Оказывается, я не туда поместила файл hero.txt (он был в папке debug), а надо было в папку с именем проекта)))
Чтобы избежать таких ошибок, при открытии файла для чтения, всегда нужно делать проверку открытия файла:
C++
1
2
3
4
5
ifstream in_file;
in_file.open("hero.txt");
if (!in_file.is_open()) cout << "Error!" << endl;
else
{...
1
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
29.08.2013, 17:10 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <iostream>
#include <string>
using std::string;
 
int main (void) {
freopen("hero.txt","r",stdin);
string s[5];
for(int i=0; 5-i; i++) std::cin >> s[i];
// ........ что-то делаете с данными .....
return 0;
}
1
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
29.08.2013, 18:33 #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Чтобы избежать таких ошибок, при открытии файла для чтения, всегда нужно делать проверку открытия файла:
Можно вместо проверки бита конца файла делать проверку http://www.cplusplus.com/reference/ios/ios/good/
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2013, 18:57 #8
Цитата Сообщение от Nekto Посмотреть сообщение
Можно вместо проверки бита конца файла делать проверку
А где у меня проверка конца файла?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.08.2013, 19:06 #9
alsav22, Имеется ввиду, что проверять на открытие необязательно. Можно просто
C++
1
while (os.good())
0
alsav22
29.08.2013, 20:07     Построчное считывание файла txt в массив
  #10

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
alsav22, Имеется ввиду, что проверять на открытие необязательно. Можно просто
Это понятно (но логичнее именно на открытие проверить).
Приводится моя цитата и говорится о том, что можно не использовать проверку на конец файла. Если это о моём предложении о проверке открытия файла, то при чём здесь конец файла? В моём коде такого нет. Если речь о проверке при чтении (в коде ТС), то при чём здесь моя цитата? Вот это я не понял...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2013, 20:07
Привет! Вот еще темы с ответами:

Построчное чтение из текстового файла .txt - C++
Имеется текстовый файл fin.txt, в котором построчно записана информация подобным типом: Марка машины ; Модель ; Цвет ; Год выпуска ;...

Считывание из файла .txt - C++
У вас есть файл input.txt содержащий строки вида key:value key1:value1 Необходимо открыть файл и вывести содержимое в...

Считывание чисел из файла с расширением .txt - C++
Решаю на с++ задачу, которая называется «Вырубка деревьев». Входными данными являются два целых числа, записанных через пробел в файле...

Считывание числовых значений из текстового файла .txt - C++
Привет. Передо мной стоит такая задача: Напишите программу. вычисляющую сумму всех целых чисел, хранящихся в текстовом файле и разделенных...


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

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

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