0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 20
1

Работа с файлами С++. Библиотека STL

19.11.2016, 22:30. Показов 3562. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пожалуйста, подскажите.
Файл читает только одну строку, а в файле больше.
Пример : Петров Петр Петрович 10 11 68
Иванов Иван Иванович 25 03 90
Как сделать так, что бы брало по строкам и отдельно по переменным? Где ошибка в коде?
Вот код класса :
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
#include <iostream>
#include <fstream>
using namespace std; 
 
class FIO
{
public:
    
    char F[20]; //Фамилия
    char I[20]; //Имя
    char O[20]; //Отчество
    unsigned short int Dt[3]; //Дата рождения
 
    void getfio() { //Функция считывания данных о людях
        ifstream in; // Объявили файл
        in.open("input.txt");
        in >> F; 
        in >> I;
        in >> O;
        for (int j = 0; j<3; j++)
            in >> Dt[j];
        
        
        in.close(); 
        //Закрыли файл
    
    }
};
Вот основной код:
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
void main(){
    setlocale(LC_ALL, "RUS");
    list<FIO> myList; //Объявили список
    list<FIO>::iterator iter; //Объявили итерации
    FIO group; //Объявили объект
    //Создаем список
    ifstream in; // Объявили файл
        in.open("input.txt");
    for (int i = 0; i < 2; i++) {
        group.getfio(in); //Вызвываем функцию
        myList.push_back(group); //Данные вносим в конец списка 
    }
    in.close(); 
    //Выводим записи
    for (iter = myList.begin(); iter != myList.end(); ++iter)
    {
    cout << "Имя: " << iter->I << " " << "Отчество: " << iter->O << " " << "Фамилия: " << iter->F << " " << "Дата рождения: ";
            
        for (int j = 0; j < 3; j++) {
            cout << iter->Dt[j];
            if (j<2) 
                cout << "."; //разделитель даты
        }
        cout << endl;
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2016, 22:30
Ответы с готовыми решениями:

Работа с файлами. Библиотека STL
Здравствуйте, помогите пожалуйста с этим заданием) Для цветов, поставляемых на склад задаются:...

Работа в С++ с *.STL файлами
Подскажите пожалуйста, какую технологию выбрать для работы с *.STL файлами, и если возможно,...

Работа с Json-файлами. Библиотека jsoncpp C+
Здраствуйте. Начал работу с json-файлами. С подключением всё нормально, но как только начинаю...

Библиотека STL
Добрый вечер, очень нуждаюсь в Вашей помощи. Пропустила тему и теперь не успеваю в ней раобраться.....

3
230 / 113 / 79
Регистрация: 17.10.2016
Сообщений: 312
19.11.2016, 23:46 2
Цитата Сообщение от programmmistka Посмотреть сообщение
C++
1
2
void getfio() { //Функция считывания данных о людях
 ifstream in; // Объявили файл
C++
1
 
C++
1
2
3
4
5
void getfio( ifstream  & in)
{
    // ifstream in 
//  in.open("input.txt");
// in.close();

Цитата Сообщение от programmmistka Посмотреть сообщение
Файл читает только одну строку, а в файле больше.
ifstream.getline, потом разбить строку
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
19.11.2016, 23:49 3
Да убери уже close() из функции - сколько повторять? Файл закроется и ничего не прочитаешь.
0
52 / 41 / 16
Регистрация: 16.12.2012
Сообщений: 144
20.11.2016, 11:27 4
Лучший ответ Сообщение было отмечено programmmistka как решение

Решение

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <fstream>
#include <list>
using namespace std;
 
class FIO
{
public:
    char * getSoname(){ return F ; }
    char * getName(){ return I ; }
    char * getPatronymic(){ return O ; }
    int  getDate(int i){ return Dt[i] ; };
 
    void getfio(ifstream &in)
        { 
            in >> F;
            in >> I;
            in >> O;
            for (int j = 0; j < 3; j++)
                in >> Dt[j];
        }
        
 
private:
    char F[20]; //Фамилия
    char I[20]; //Имя
    char O[20]; //Отчество
    int Dt[3]; //Дата рождения
        
 
    
};
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "RUS");
    
    
    list<FIO> myList; //Объявили список
    list<FIO>::iterator iter; //Объявили итерации
    FIO group; //Объявили объект
    //Создаем список
    ifstream in; // Объявили файл
    in.open("input.txt");
    if (in)
        {
            while (!in.eof())
                {
                    group.getfio(in); //Вызвываем функцию
                    myList.push_back(group); //Данные вносим в конец списка 
                }
        }
    in.close();
    
    //Выводим записи
    for (iter = myList.begin(); iter != myList.end(); ++iter)
    {
        cout << "Имя: " << iter->getName() << " " << "Отчество: " << iter->getPatronymic() << " " << "Фамилия: " << iter->getSoname() << " " << "Дата рождения: ";
 
        for (int j = 0; j < 3; j++) {
            cout << iter->getDate(j);
            if (j<2)
                cout << "."; //разделитель даты
        }
        cout << endl;
    }
    
    system("pause");
    return 0;
}
1
20.11.2016, 11:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2016, 11:27
Помогаю со студенческими работами здесь

Библиотека STL
Есть у кого задачи решенные по библиотеке STL с блок схемой, очень нужно!

библиотека STL
Подскажите где можно почитать про библиотеку STL. Говорю сразу с английским не дружу((

Библиотека шаблонов STL
Здравствуйте, как можно сформировать массив множеств ptr, который формируется из строки str = &quot;the...

Библиотека STL, сортировка
Сортировка слов по количеству вхождений в слово его первой буквы... Можно какой-нибудь пример?? ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru