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

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

Восстановить пароль Регистрация
 
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
29.08.2013, 14:53     Построчное считывание файла txt в массив #1
Добрый день.

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

Суть программы такая: есть файл 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 строчек. Что делать и как быть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2013, 15:02     Построчное считывание файла txt в массив #2
Nullik, Используйте std::getline.
C++
1
in_file >> Hero[i];
Должно быть
C++
1
std::getline(in_file, Hero[i]);
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
29.08.2013, 15:03     Построчное считывание файла txt в массив #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;
}
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
29.08.2013, 15:26  [ТС]     Построчное считывание файла txt в массив #4
ForEveR, заменила так, как вы сказали, пишет вот что:

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

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

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

ForEveR, большое спасибо, всё работает корректно!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2013, 17:06     Построчное считывание файла txt в массив #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
{...
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
29.08.2013, 17:10     Построчное считывание файла txt в массив #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;
}
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
29.08.2013, 18:33     Построчное считывание файла txt в массив #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Чтобы избежать таких ошибок, при открытии файла для чтения, всегда нужно делать проверку открытия файла:
Можно вместо проверки бита конца файла делать проверку http://www.cplusplus.com/reference/ios/ios/good/
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2013, 18:57     Построчное считывание файла txt в массив #8
Цитата Сообщение от Nekto Посмотреть сообщение
Можно вместо проверки бита конца файла делать проверку
А где у меня проверка конца файла?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2013, 19:06     Построчное считывание файла txt в массив #9
alsav22, Имеется ввиду, что проверять на открытие необязательно. Можно просто
C++
1
while (os.good())
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2013, 20:07     Построчное считывание файла txt в массив
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
29.08.2013, 20:07     Построчное считывание файла txt в массив
  #10

Не по теме:

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

Yandex
Объявления
29.08.2013, 20:07     Построчное считывание файла txt в массив
Ответ Создать тему
Опции темы

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