Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для evelolka
2 / 2 / 0
Регистрация: 25.10.2013
Сообщений: 108

Не могу найти свою криворукость при записи/чтении из файла

15.06.2014, 20:52. Показов 857. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
дан двусвязный список
когда ввожу данные он нормально показывает и в прямом и в обратном порядке
но считать из файла я нормально не могу
поглядите что не так просто я пока не пойму

P.S. конструкторы/деструкторы не проходил ещё

запись

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <fstream>
#include <cstring>
 
int main()
{
    struct PLAYERS
    {
        char name[100] , family[100] ;
        int goals , usage , bad_time ;
        PLAYERS* next, *prev ;
    } ;
    PLAYERS* head = 0 ;
    PLAYERS* tail = 0 ;
    PLAYERS* curr = 0 ;
    PLAYERS write_this ;
    std::cout << "Ввести данные для: " << std::endl
              << "  1 - Спартак " << std::endl
              << "  2 - Динамо " << std::endl ;
    int team , v ;
    std::cin >> team ;
    v = team ;
    std::cout<<"\E[H\E[J";
    int numb_players = 0 ;
    while(  v == 1 &&  numb_players < 4)
    {
        if ( head == 0 )
        {
            head = new PLAYERS ;
            tail = head ;
            head -> prev = 0 ;
        }
        else
        {
            tail -> next = new PLAYERS ;
            tail -> next -> prev = tail ;
            tail = tail -> next ;
        }
        std::cout << "Имя:           " ;
        std::cin.ignore() ;
        std::cin.get( tail -> name , 100 ) ;
        std:: cout <<"Фамилия:       " ;
        std::cin.ignore() ;
        std::cin.get( tail -> family , 100 ) ;
        std::cout << "Забито шайб:   " ;
        std::cin >> tail -> goals ;
        std::cout << "Голевых передач:" ;
        std::cin >> tail -> usage ;
        std::cout << "Штрафное время: " ;
        std::cin >> tail -> bad_time ;
        std::cout << "Ввести ещё данные? 1-да 2-нет " << std::endl ;
        std::cin >> v ;
        std::cout<<"\E[H\E[J";
        numb_players++ ;
        std::cout << "Введено " << numb_players << " записей" << std::endl ;
        tail -> next = 0 ;
    }
    curr = head ;
    std::cout << "|      Имя      |    Фамилия    |Забито шайб|  Передач |Штрафное время|" << std::endl ;
    std::cout<<"''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"<< std::endl ;
    while( curr !=0 )
    {
        printf( "|%15s|%15s|%11i|%10i|%14i|",
                curr->name ,
                curr->family ,
                curr->goals ,
                curr->usage ,
                curr->bad_time ) ;
        std::cout<< std::endl <<"''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"<< std::endl ;
        curr = curr -> next ;
    }
    curr = tail ;
    std::cout << "|      Имя      |    Фамилия    |Забито шайб|  Передач |Штрафное время|" << std::endl ;
    std::cout<<"''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"<< std::endl ;
    while( curr !=0 )
    {
        printf( "|%15s|%15s|%11i|%10i|%14i|",
                curr->name ,
                curr->family ,
                curr->goals ,
                curr->usage ,
                curr->bad_time ) ;
        std::cout<< std::endl <<"''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"<< std::endl ;
        curr = curr -> prev ;
    }
 
    std::ofstream out( "vvod.txt" , std::ios::out|std::ios::binary ) ;
    curr = head ;
    while( curr != 0 )
    {
        strcpy( write_this.name , curr -> name ) ;
        strcpy( write_this.family , curr -> family ) ;
        write_this.goals = curr->goals;
        write_this.usage = curr->usage;
        write_this.bad_time = curr->bad_time;
        out.write( (char*)&write_this , sizeof( PLAYERS ) ) ;
        curr = curr -> next ;
    }
    out.close() ;
    return 0;
}


чтение

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
#include <iostream>
#include <fstream>
#include <cstring>
 
struct PLAYERS
{
    char name[100] , family[100] ;
    int goals , usage , bad_time ;
    PLAYERS* next, *prev ;
} ;
PLAYERS* head = 0 ;
PLAYERS* tail = 0 ;
PLAYERS* curr = 0 ;
PLAYERS read_this ;
 
int main()
{
    std::ifstream in( "vvod.txt" , std::ios::in|std::ios::binary ) ;
    while( !in.eof() )
    {
        if ( head == 0 )
        {
            head = new PLAYERS ;
            tail = head ;
            head -> prev = 0 ;
        }
        else
        {
            tail -> next = new PLAYERS ;
            tail -> next -> prev = tail ;
            tail = tail -> next ;
        }
        in.read( (char*)&read_this , sizeof( PLAYERS ) ) ;
        strcpy( tail -> next -> name , read_this.name ) ;
        strcpy( tail -> next -> family , read_this.family ) ;
        tail -> goals = read_this.goals ;
        tail -> usage = read_this.usage ;
        tail -> bad_time = read_this.bad_time ;
        tail -> next = 0 ;
    }
    in.close() ;
    curr = head ;
    std::cout << "|      Имя      |    Фамилия    |Забито шайб|  Передач |Штрафное время|" << std::endl ;
    std::cout<<"''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"<< std::endl ;
    while( curr != 0 )
    {
        printf( "|%15s|%15s|%11i|%10i|%14i|",
                curr -> name ,
                curr -> family ,
                curr -> goals ,
                curr -> usage ,
                curr -> bad_time ) ;
        std::cout<< std::endl <<"''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"<< std::endl ;
        curr = curr -> next ;
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2014, 20:52
Ответы с готовыми решениями:

Блокировка файла при чтении и записи
осуществляется работа с одним и тем же файлом. Каждый процесс открывает файлОдин процесс пишет в файл, другой - читает из него. нужно...

Ошибки при записи и чтении из файла
double calc(int n, double sum, int a, int b, double p, double f) { if(n == 0) return sum; else{ sum += p...

Ошибка при чтении/записи из бинарного файла
Сделал простую программу для работы с бинарными файлами, но когда запускаю ее вылетает ошибка. Сделать проще уже некуда, в чем проблема? ...

1
1267 / 980 / 385
Регистрация: 02.09.2012
Сообщений: 3,027
16.06.2014, 14:44
Вижу две проблемы при чтении.
1. строки 34 - 35. Зачем tail->next ????? кто заполняет next у tail для первого элемента... нужно убрать next... оставить просто tail при этом нужно исправить часть else при создании объекта... короче приведите все к tail, если вы его уже используете в качестве текущего считываемого элемента
2. и почитайте про eof... скорее всего надо еще после in.read ставить дополнительную проверку, иначе последняя запись будет "как бы считана" два раза.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.06.2014, 14:44
Помогаю со студенческими работами здесь

Выход при неудачном чтении/записи файла
Как правильнее делать? void f() { if ((fl = fopen(&quot;name&quot;, &quot;mode&quot;)) == NULL) { cout &lt;&lt; &quot;Error! &lt;&lt; endl&quot;; exit(1); } ...

Выдает ошибку при чтении и записи файла
Выдает ошибку при чтении и при записи файла. Дебагер указывает соответственно на строку ReadFile или на строку после WriteFile . (First...

Задвоение последней записи при чтении из файла
Не могу разобраться почему последняя запись в файле всегда задваивается при выводе void Vivod(void) { struct facultet Fclt; FILE...

Задание имени файла пользователем при чтении и записи
Программа должна осуществлять запись в файл или чтение из файла (по выбору пользователя) целых чисел. Пока я написала вот такой код: ...

Изменение кодировки текста при чтении/записи файла txt
Здравствуйте! Код ниже изменяет файл (отбрасывает последний знак в файле &quot;переноса строки&quot; если таковой имеется), но при изменении...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru