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

Правильно ли я записываю/ считываю ( принцип вроде да а реализовано УГ) - C++

Восстановить пароль Регистрация
 
evelolka
 Аватар для evelolka
2 / 2 / 0
Регистрация: 25.10.2013
Сообщений: 108
30.05.2014, 21:32     Правильно ли я записываю/ считываю ( принцип вроде да а реализовано УГ) #1
В общем дан односвязный список
помогите найти косяк
сама структура
C++
1
2
3
4
5
6
7
8
9
struct WORKER
    {
      char name[100], family[100] , dolzhnost[100] ;
      int year;
      WORKER *next ;
    };
    WORKER *head = 0 ;
    WORKER *curr = 0 ;
    WORKER tit ;
я понимаю так
чтобы записать в файл нужно
1) создать структуру скопировать в неё текущий элемент и записать его в файл и так до конца списка
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::ofstream out("lab.txt", std::ios_base::out );
    curr = head;
    while( curr -> next != 0 )
    {
        strcpy( tit.name , curr -> name ) ;
        strcpy( tit.family , curr -> family ) ;
        strcpy( tit.dolzhnost , curr -> dolzhnost ) ;
        tit.year = curr -> year ;
        out.write( (char*)&tit , sizeof( WORKER ) );
        curr = curr -> next ;
    };
    out.close() ;
2) для считывания сделать наоборот




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
char file[100];
            std::cout << "\nВведите имя файла" << std::endl ;
            std::cin >> file;
            std::ifstream in( file , std::ios_base::in );
            if ( !in.is_open() )
                {
                    std::cout << "Файл не может быть открыт или создан\n" << std::endl ;
                    return 1 ;
                }
            curr = head ;
            while( !in.eof() )
            {
                if ( head == 0 )
                {
                    head = new WORKER ;
                    curr = head ;
                }
                else
                {
                    curr -> next = new WORKER ;
                    curr = curr -> next ;
                }
                in.read( ( char* )&tit , sizeof( WORKER ) ) ;
                //////////////так считает 1 элемент и выведет на экран/////////////
                std::cout << tit.name << std::endl ;
                std::cout << tit.family << std::endl ;
                std::cout << tit.dolzhnost << std::endl ;
                std::cout << tit.year << std::endl ;
                ////////////////////////////не копирует в структуру///////////////
                strncpy( curr -> name , tit.name , 30 ) ;
                strncpy( curr -> family , tit.family ,30 ) ;
                strncpy( curr -> dolzhnost , tit.dolzhnost , 30 ) ;
                curr -> year = tit.year ;
                //////////////////////////////////////////////////////////////////
                curr = curr -> next ;
            };
        in.close();
        curr -> next = 0 ;


yj
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2014, 21:32     Правильно ли я записываю/ считываю ( принцип вроде да а реализовано УГ)
Посмотрите здесь:

C++ Прога на Си, все правильно вроде, но выскакивает
Правильно ли считываю матрицу? C++
Ошибки вроде бы нет, но работает не правильно! C++
Почему выдаёт ошибку? Вроде всё правильно! C++
C++ Выдает ошибку но вроде все правильно посмотрите!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kylroma
Одессит
 Аватар для kylroma
44 / 44 / 18
Регистрация: 30.12.2013
Сообщений: 203
Записей в блоге: 1
Завершенные тесты: 1
30.05.2014, 22:49     Правильно ли я записываю/ считываю ( принцип вроде да а реализовано УГ) #2
Если структуру записывать в текстовый файл, то выходит коряво. Обычно ей записывают в бинарный файл. Структура будет храниться как единое целое. И короче код.
Jewbacabra
1791 / 1506 / 539
Регистрация: 24.04.2014
Сообщений: 4,229
30.05.2014, 23:05     Правильно ли я записываю/ считываю ( принцип вроде да а реализовано УГ) #3
evelolka, а зачем на одной итерации два раза делать curr = curr->next; ?
evelolka
 Аватар для evelolka
2 / 2 / 0
Регистрация: 25.10.2013
Сообщений: 108
31.05.2014, 11:46  [ТС]     Правильно ли я записываю/ считываю ( принцип вроде да а реализовано УГ) #4
всё спасибо понял косяк)

вот так надо было)
C++
1
2
3
4
5
6
in.read( ( char* )&tit , sizeof( WORKER ) ) ;
                strncpy( curr -> name , tit.name , 100 ) ;
                strncpy( curr -> family , tit.family , 100 ) ;
                strncpy( curr -> dolzhnost , tit.dolzhnost , 100 ) ;
                curr -> year = tit.year ;
                curr -> next = 0 ;
прост сразу не понял про какой говорилось)
Yandex
Объявления
31.05.2014, 11:46     Правильно ли я записываю/ считываю ( принцип вроде да а реализовано УГ)
Ответ Создать тему
Опции темы

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