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

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

Войти
Регистрация
Восстановить пароль
 
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
#1

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

11.07.2013, 06:58. Просмотров 545. Ответов 7
Метки нет (Все метки)

Есть файл с 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 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5413 / 4809 / 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
5413 / 4809 / 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
5413 / 4809 / 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++ Чтение из файла в массив
Считать из файла слова и занести их в массив string-ов C++
C++ Чтение из файла в массив
Чтение из файла в массив структур (ошибка со string) C++
Чтение из файла в массив C++

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

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

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