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

Чтение из файла в массив string - C++

Восстановить пароль Регистрация
 
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 06:58     Чтение из файла в массив string #1
Есть файл с 50 строками (в конце последней - '\n') и код чтения строк в массив string. При чтении идёт подсчёт считанных строк. Если количество строк в файле больше или равно размеру массива, то выход, из чтения файла, происходит при достижении равенства считанных строк и размера массива. Если же массив больше, чем количество строк в файле, то выход из чтения происходит при достижении конца файла. Как сделать, чтобы при размере массива не достаточном для считывания все строк из файла, выводилось предупреждение. В коде, предупреждение выводится и тогда, когда размер массива равен 50, т.е. достаточен для считывания всех строк из файла. В остальных случаях всё правильно.

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 <string>
#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    const int N = 50;
    string arr[N];
 
    ifstream fin("50string.txt");
   
    if (!fin.is_open()) cout << "Error!\n";
    else
    {
        int n = 0;
        while (true)
        {
            getline(fin, arr[n]);
            if (fin.eof()) break;
            ++n;
            if (n == N) break;
        }
        
        for (int i = 0; i < n; ++i)
            cout << arr[i] << endl;
        
        cout << endl << "n = " << n << endl;
        
        if (!fin.eof() && n == N) cout << "\nThe array size is too small!\n" << endl;
        else cout << "\nSuccessful!\n" << endl;
        
        fin.close();
    }
    
    system("pause");
    return 0;
}
Вложения
Тип файла: txt 50string.txt (1.5 Кб, 4 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 06:58     Чтение из файла в массив string
Посмотрите здесь:

string чтение из файла C++
Чтение из файла в массив C++
C++ Чтение из файла в переменную типа string
Чтение файла целиком в std::string C++
C++ сохранение/чтение map<string,string*> в файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 08:33  [ТС]     Чтение из файла в массив string #2
Какие есть идеи?
Hrobak
288 / 168 / 11
Регистрация: 22.03.2010
Сообщений: 483
Завершенные тесты: 1
11.07.2013, 10:12     Чтение из файла в массив string #3
У меня компилятор G++4.8.1, если что. Насколько я знаю, eofbit выставляется не при чтении последнего символа, а при попытке считать дальше. У вас же в цикле просто считываются все строки, но fin.eof() все равно false. Если перед if-кой добавить fin.get(); то будет ок.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 10:18  [ТС]     Чтение из файла в массив string #4
Цитата Сообщение от Hrobak Посмотреть сообщение
то будет ок.
В каком смысле ок? Тут проблема не в eof().
Цитата Сообщение от alsav22 Посмотреть сообщение
Если же массив больше, чем количество строк в файле, то выход из чтения происходит при достижении конца файла.
Это всё работает.
Цитата Сообщение от Hrobak Посмотреть сообщение
Если перед if-кой добавить fin.get();
В какой строке предлагаете?
Hrobak
288 / 168 / 11
Регистрация: 22.03.2010
Сообщений: 483
Завершенные тесты: 1
11.07.2013, 10:20     Чтение из файла в массив string #5
Имел в виду, что обрабатывается корректно и случай с ровно 50 строчками (Successful!) и с бОльшим количеством (The array size is too small!).
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 10:25  [ТС]     Чтение из файла в массив string #6
Проверить недолго...
Цитата Сообщение от alsav22 Посмотреть сообщение
В какой строке предлагаете?
Добавлено через 1 минуту
А лучше код с дополнениями...
Hrobak
288 / 168 / 11
Регистрация: 22.03.2010
Сообщений: 483
Завершенные тесты: 1
11.07.2013, 10:25     Чтение из файла в массив string #7
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 <string>
#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    const int N = 50;
    string arr[N];
 
    ifstream fin("50string.txt");
 
    if (!fin.is_open()) cout << "Error!\n";
    else
    {
        int n = 0;
        while (true)
        {
            getline(fin, arr[n]);
            if (fin.eof()) break;
            ++n;
            if (n == N) break;
        }
 
        for (int i = 0; i < n; ++i)
            cout << arr[i] << endl;
 
        cout << endl << "n = " << n << endl;
        fin.get();
        if (!fin.eof() && n == N) cout << "\nThe array size is too small!\n" << endl;
        else cout << "\nSuccessful!\n" << endl;
 
        fin.close();
    }
 
    //system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 10:32     Чтение из файла в массив string
Еще ссылки по теме:

C++ Чтение из файла в массив
C++ Чтение из файла в массив
Чтение из файла в массив структур (ошибка со string) C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 10:32  [ТС]     Чтение из файла в массив string #8
Благодарю!
Yandex
Объявления
11.07.2013, 10:32     Чтение из файла в массив string
Ответ Создать тему
Опции темы

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