Некорректный вывод данных из файла в односвязный список - C++ [дубликат]

180
30 июля 2018, 08:00

На данный вопрос уже ответили:

  • Правильное использование проверки конца файла 1 ответ

Всем, привет вот сижу пишу курсовую и не могу понять причину такого вывода из файла, дело в том что при загрузке данных из файла в список, у меня появляется один лишний узел с непонятными данными будто у меня в конце файла пробел но вот пробела в конце файла нет, проверял несколько раз, смотреть 3 последних функции.

Вот код:

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale.h>
#include <stdio.h>
#include <fstream>

using namespace std;
struct Date_mntn //Структура для хранения даты.
{
    int day;
    int month;
    int year;
};
struct Car_park //Структура автопрака.
{
    char model_car\[30\]; //Модель автомобиля.
    char name_driver\[30\]; //Имя водителя.
    char surname\[30\]; //Фамилия.
    double price; //Балансовая стоимость автомобиля.
    Date_mntn dtm; //Дата тех-обслуживания.
    int route_number; //Номер маршрута.
    int id;
};
struct List //Список.
{
    Car_park crp;
    List *next;
};
void output(List* begin);
void add_end(List** begin, List** end);
void add_begin(List** begin, List** end);
void sortList(List* begin);
void showDriverMinCost(List* begin);
void showAllLessDate(List* begin);
void showAllByLetter(List* begin);
void remove(List** begin, List** end);
void update(List* begin);
void save_f(List* begin);
void load_f(List** begin, List** end);
void add_f(List** begin, List** end);
int main()
{
    setlocale(LC_CTYPE, "rus");
    List *begin = NULL;
    List *end = NULL;
    int key;
    cout << " __________________________________________________________________" << endl;
    cout << "|Добро пожаловать в программу по управлению базой данных авто-парк.          |" << end                                                   
    cout << "|__________________________________________________________________|" << endl;
    cout << " ___________________________________________________________________" << endl;
    cout << "|Данные в этой базе хранятся в таком формате:                       |" << endl;
    cout << "|-Модель.                                                           |" << endl;
    cout << "|-ФИО водителя.                                                     |"<< endl;
    cout << "|-Балансовая стоимость автобуса.                                    |" << endl;
    cout << "|-Дата тех-обслуживания.                                            |" << endl;
    cout << "|-Номер маршрута.                                                   |" << endl;
    cout << "|___________________________________________________________________|" << endl;
    cout << "Нажмите на любую клавишу для входа в командное меню программы." << endl;
    _getch();
    do
    {
        system("cls");
        cout << "=======================================================================" << endl;
        cout << "|Для выбора соответствующего действия введите цифру и нажмите <Enter>.|" << endl;
        cout << "=======================================================================" << endl;
        cout << "Меню программы:" << endl;
        cout << "1- Добавить элемент в конец." << endl;
        cout << "2- Добавить элемент в начало." << endl;
        cout << "3- Вывод всего списка." << endl;
        cout << "4- Отсортировать список по номеру маршрута." << endl;
        cout << "5- Водитель с наименьшей стоимостью автобуса." << endl;
        cout << "6- Список автобусов прошедших тех-обслуживание ранее заданной даты." << endl;
        cout << "7- Поиск автобусов начинающихся на заданную букву." << endl;
        cout << "8- Удалить элемент списка." << endl;
        cout << "9- Редактирование информации в узле." << endl;
        cout << "10- Сохранение введеных данных в файл." << endl;
        cout << "11- Загрузка данных в программу." << endl;
        cout << "0- Выход." << endl;
        cout << "======================================================================" << endl;
        cout << "Ваш выбор:";
        cin >> key;
        switch (key)
        {
        case 1:
            system("cls");
            add_end(&begin, &end);
            _getch();
            break;
        case 2:
            system("cls");
            add_begin(&begin, &end);
            _getch();
            break;
        case 3:
            system("cls");
            output(begin);
            _getch();
            break;
        case 4:
            system("cls");
            sortList(begin);
            _getch();
            break;
        case 5:
            system("cls");
            showDriverMinCost(begin);
            _getch();
            break;
        case 6:
            system("cls");
            showAllLessDate(begin);
            _getch();
            break;
        case 7:
            system("cls");
            showAllByLetter(begin);
            _getch();
            break;
        case 8:
            system("cls");
            remove(&begin, &end);
            _getch();
            break;
        case 9:
            system("cls");
            update(begin);
            _getch();
            break;
        case 10:
            system("cls");
            save_f(begin);
            _getch();
            break;
        case 11:
            system("cls");
            load_f(&begin,&end);
            _getch();
            break;
        case 0:
            break;
        default:
            cout << "В меню нет такого пункта." << endl;
            break;
        }
    } while (key != 0);
    _getch();
    return 0;
}
void add_end(List** begin, List** end)
{
    if (!*begin)
    {
        *end = new List;
        cout << "Модель автобуса:";
        cin >> (*end)->crp.model_car;
        cout << "Имя водителя:";
        cin >> (*end)->crp.name_driver;
        cout << "Фамилия:";
        cin >> (*end)->crp.surname;
        cout << "Стоимость автобуса в $:";
        while (!(cin >> (*end)->crp.price) || ((*end)->crp.price) < 0)
        {
            cout << "\nОшибка ввода !!!" << endl;
            cout << "Некоректно введена цена либо не заполнен пункт." << endl;
            cout << "Cтоимость автобуса в $:";
        }
        cout << "Введите дату тех-обслуживания в формате д/м/гггг:" << endl;
        cout << "День:";
        while (!(cin >> (*end)->crp.dtm.day) || ((*end)->crp.dtm.day) > 30 || ((*end)->crp.dtm.day) < 0)
        {
            cout << "\nОшибка ввода !!!\n";
            _getch();
            system("cls");
            cout << "Введен некоректный день либо пункт не заполне." << endl;
            cout << "День:";
        }
        cout << "Месяц:";
        while (!(cin >> (*end)->crp.dtm.month) || ((*end)->crp.dtm.month) > 12 || ((*end)->crp.dtm.month) < 1)
        {
            cout << "\nОшибка ввода !!!\n";
            _getch();
            system("cls");
            cout << "Введен некоректный месяц либо пункт не заполне." << endl;
            cout << "Месяц:";
        }
        cout << "Год:";
        while (!(cin >> (*end)->crp.dtm.year) || ((*end)->crp.dtm.year) > 2018 || ((*end)->crp.dtm.year) < 1913)
        {
            cout << "\nОшибка ввода !!!\n";
            _getch();
            system("cls");
            cout << "Введен некоректный год либо пункт не заполне." << endl;
            cout << "Год:";
        }
        cout << "Номер маршрута:";
        cin >> (*end)->crp.route_number;
        cout << "Введите id узла:";
        cin >> (*end)->crp.id;
        (*end)->next = NULL;
        *begin = *end;
        return;
    }
    (*end)->next = new List;
    *end = (*end)->next;
    cout << "Модель автобуса:";
    cin >> (*end)->crp.model_car;
    cout << "Имя водителя:";
    cin >> (*end)->crp.name_driver;
    cout << "Фамилия:";
    cin >> (*end)->crp.surname;
    cout << "Стоимость автобуса в $:";
    while (!(cin >> (*end)->crp.price) || ((*end)->crp.price) < 0)
    {
        cout << "\nОшибка ввода !!!" << endl;
        cout << "Некоректно введена цена либо не заполнен пункт." << endl;
        cout << "Cтоимость автобуса в $:";
    }
    cout << "Введите дату тех-обслуживания в формате д/м/гггг:" << endl;
    cout << "День:";
    while (!(cin >> (*end)->crp.dtm.day) || ((*end)->crp.dtm.day) > 30 || ((*end)->crp.dtm.day) < 0)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный день либо пункт не заполне." << endl;
        cout << "День:";
    }
    cout << "Месяц:";
    while (!(cin >> (*end)->crp.dtm.month) || ((*end)->crp.dtm.month) > 12 || ((*end)->crp.dtm.month) < 1)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный месяц либо пункт не заполне." << endl;
        cout << "Месяц:";
    }
    cout << "Год:";
    while (!(cin >> (*end)->crp.dtm.year) || ((*end)->crp.dtm.year) > 2018 || ((*end)->crp.dtm.year) < 1913)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный год либо пункт не заполне." << endl;
        cout << "Год:";
    }
    cout << "Номер маршрута:";
    cin >> (*end)->crp.route_number;
    cout << "Введите id узла:";
    cin >> (*end)->crp.id;
    (*end)->next = NULL;
}
void add_begin(List** begin, List** end)
{
    if (!*begin)
    {
        *end = new List;
        cout << "Модель автобуса:";
        cin >> (*end)->crp.model_car;
        cout << "Имя водителя:";
        cin >> (*end)->crp.name_driver;
        cout << "Фамилия:";
        cin >> (*end)->crp.surname;
        cout << "Стоимость автобуса в $:";
        while (!(cin >> (*end)->crp.price) || ((*end)->crp.price) < 0)
        {
            cout << "\nОшибка ввода !!!" << endl;
            cout << "Некоректно введена цена либо не заполнен пункт." << endl;
            cout << "Cтоимость автобуса в $:";
        }
        cout << "Введите дату тех-обслуживания в формате д/м/гггг:" << endl;
        cout << "День:";
        while (!(cin >> (*end)->crp.dtm.day) || ((*end)->crp.dtm.day) > 30 || ((*end)->crp.dtm.day) < 0)
        {
            cout << "\nОшибка ввода !!!\n";
            _getch();
            system("cls");
            cout << "Введен некоректный день либо пункт не заполне." << endl;
            cout << "День:";
        }
        cout << "Месяц:";
        while (!(cin >> (*end)->crp.dtm.month) || ((*end)->crp.dtm.month) > 12 || ((*end)->crp.dtm.month) < 1)
        {
            cout << "\nОшибка ввода !!!\n";
            _getch();
            system("cls");
            cout << "Введен некоректный месяц либо пункт не заполне." << endl;
            cout << "Месяц:";
        }
        cout << "Год:";
        while (!(cin >> (*end)->crp.dtm.year) || ((*end)->crp.dtm.year) > 2018 || ((*end)->crp.dtm.year) < 1913)
        {
            cout << "\nОшибка ввода !!!\n";
            _getch();
            system("cls");
            cout << "Введен некоректный год либо пункт не заполне." << endl;
            cout << "Год:";
        }
        cout << "Номер маршрута:";
        cin >> (*end)->crp.route_number;
        cout << "Введите id узла:";
        cin >> (*end)->crp.id;
        (*end)->next = NULL;
        *begin = *end;
        return;
    }
    List* n = new List;
    cout << "Модель автобуса:";
    cin >> n->crp.model_car;
    cout << "Имя водителя:";
    cin >> n->crp.name_driver;
    cout << "Фамилия:";
    cin >> n->crp.surname;
    cout << "Стоимость автобуса в $:";
    while (!(cin >> n->crp.price) || (n->crp.price) < 0)
    {
        cout << "\nОшибка ввода !!!" << endl;
        cout << "Некоректно введена цена либо не заполнен пункт." << endl;
        cout << "Cтоимость автобуса в $:";
    }
    cout << "Введите дату тех-обслуживания в формате д/м/гггг:" << endl;
    cout << "День:";
    while (!(cin >> n->crp.dtm.day) || (n->crp.dtm.day) > 30 || (n->crp.dtm.day) < 0)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный день либо пункт не заполне." << endl;
        cout << "День:";
    }
    cout << "Месяц:";
    while (!(cin >> n->crp.dtm.month) || (n->crp.dtm.month) > 12 || (n->crp.dtm.month) < 1)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный месяц либо пункт не заполне." << endl;
        cout << "Месяц:";
    }
    cout << "Год:";
    while (!(cin >> n->crp.dtm.year) || (n->crp.dtm.year) > 2018 || (n->crp.dtm.year) < 1913)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный год либо пункт не заполне." << endl;
        cout << "Год:";
    }
    cout << "Номер маршрута:";
    cin >> n->crp.route_number;
    cout << "Введите id узла:";
    cin >> n->crp.id;
    n->next = *begin;
    *begin = n;
}
void output(List* begin)
{
    if (!begin)
    {
        cout << "Список пуст." << endl;
    }
    List* print = begin;
    while (print)
    {

        cout << " _____________________________" << endl;
        cout << "|Модель автобуса:" << print->crp.model_car << endl;
        cout << "|ФИО:" << print->crp.name_driver << " " << print->crp.surname << endl;
        cout << "|Стоимость автобуса:" << print->crp.price << "$" << endl;
        cout << "|Дата:" << print->crp.dtm.day << "." << print->crp.dtm.month << "." << print->crp.dtm.year << endl;
        cout << "|Номер маршрута:" << print->crp.route_number << endl;
        cout << "|id:" << print->crp.id << endl;
        cout << "|____________________________" << endl;
        cout << "\n";
        print = print->next;
    }
}
void sortList(List* begin)
{
    if (!begin)
    {
        cout << "Список пуст." << endl;
        return;
    }
    List* ptrN = begin;
    while (ptrN->next != NULL)
    {
        List* ptr = begin;
        while (ptr->next != NULL)
        {
            if (ptr->crp.route_number > ptr->next->crp.route_number)
            {
                Car_park tmp = ptr->crp;
                ptr->crp = ptr->next->crp;
                ptr->next->crp = tmp;
            }
            ptr = ptr->next;
        }
        ptrN = ptrN->next;
    }
}
void showDriverMinCost(List* begin)
{
    List* ptr = begin;
    List* min = begin;
    while (ptr != NULL)
    {
        if (ptr->crp.price < min->crp.price)
        {
            min = ptr;
        }
        ptr = ptr->next;
    }

    cout << " _____________________________" << endl;
    cout << "|Модель автобуса:" << min->crp.model_car << endl;
    cout << "|ФИО:" << min->crp.name_driver << " " << min->crp.surname << endl;
    cout << "|Стоимость автобуса:" << min->crp.price << "$" << endl;
    cout << "|Дата:" << min->crp.dtm.day << "." << min->crp.dtm.month << "." << min->crp.dtm.year << endl;
    cout << "|Номер маршрута:" << min->crp.route_number << endl;
    cout << "|id:" << min->crp.id << endl;
    cout << "|____________________________" << endl;
    cout << "\n";
}
void showAllLessDate(List* begin)
{
    List* ptr = begin;
    int day;
    int month;
    int year;
    cout << "Введите дату для сравнения:" << endl;
    cout << "День:";
    while (!(cin >>day) || day > 30 || day < 0)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный день либо пункт не заполне." << endl;
        cout << "День:";
    }
    cout << "Месяц:";
    while (!(cin >> month) || month > 12 || month < 1)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный месяц либо пункт не заполне." << endl;
        cout << "Месяц:";
    }
    cout << "Год:";
    while (!(cin >> year) || year > 2018 || year < 1913)
    {
        cout << "\nОшибка ввода !!!\n";
        _getch();
        system("cls");
        cout << "Введен некоректный год либо пункт не заполне." << endl;
        cout << "Год:";
    }
    while (ptr != NULL)
    {
        if (ptr->crp.dtm.year == year)
        {
            if (ptr->crp.dtm.month == month)
            {
                if (ptr->crp.dtm.day < day)
                {
                    cout << " _____________________________" << endl;
                    cout << "|Модель автобуса:" << ptr->crp.model_car << endl;
                    cout << "|ФИО:" << ptr->crp.name_driver << " " << ptr->crp.surname << endl;
                    cout << "|Стоимость автобуса:" << ptr->crp.price << "$" << endl;
                    cout << "|Дата:" << ptr->crp.dtm.day << "." << ptr->crp.dtm.month << "." << ptr->crp.dtm.year << endl;
                    cout << "|Номер маршрута:" << ptr->crp.route_number << endl;
                    cout << "|id:" << ptr->crp.id << endl;
                    cout << "|____________________________" << endl;
                    cout << "\n";
                }
            }
            if (ptr->crp.dtm.month < month)
            {
                cout << " _____________________________" << endl;
                cout << "|Модель автобуса:" << ptr->crp.model_car << endl;
                cout << "|ФИО:" << ptr->crp.name_driver << " " << ptr->crp.surname << endl;
                cout << "|Стоимость автобуса:" << ptr->crp.price << "$" << endl;
                cout << "|Дата:" << ptr->crp.dtm.day << "." << ptr->crp.dtm.month << "." << ptr->crp.dtm.year << endl;
                cout << "|Номер маршрута:" << ptr->crp.route_number << endl;
                cout << "|id:" << ptr->crp.id << endl;
                cout << "|____________________________" << endl;
                cout << "\n";
            }
        }
        if (ptr->crp.dtm.year < year)
        {
            cout << " _____________________________" << endl;
            cout << "|Модель автобуса:" << ptr->crp.model_car << endl;
            cout << "|ФИО:" << ptr->crp.name_driver << " " << ptr->crp.surname << endl;
            cout << "|Стоимость автобуса:" << ptr->crp.price << "$" << endl;
            cout << "|Дата:" << ptr->crp.dtm.day << "." << ptr->crp.dtm.month << "." << ptr->crp.dtm.year << endl;
            cout << "|Номер маршрута:" << ptr->crp.route_number << endl;
            cout << "|id:" << ptr->crp.id << endl;
            cout << "|____________________________" << endl;
            cout << "\n";
        }

        ptr = ptr->next;
    }
}
void showAllByLetter(List* begin)
{
    char Letter;
    cout << "Введите букву для поиска нужного автобуса:" << endl;
    cout << "Буква:";
    cin >> Letter;
    List* ptr = begin;
    while (ptr != NULL)
    {
        if (ptr->crp.model_car\[0\] == Letter)
        {
            cout << " _____________________________" << endl;
            cout << "|Модель автобуса:" << ptr->crp.model_car << endl;
            cout << "|ФИО:" << ptr->crp.name_driver << " " << ptr->crp.surname << endl;
            cout << "|Стоимость автобуса:" << ptr->crp.price << "$" << endl;
            cout << "|Дата:" << ptr->crp.dtm.day << "." << ptr->crp.dtm.month << "." << ptr->crp.dtm.year << endl;
            cout << "|Номер маршрута:" << ptr->crp.route_number << endl;
            cout << "|id:" << ptr->crp.id << endl;
            cout << "|____________________________" << endl;
            cout << "\n";
        }
        ptr = ptr->next;
    }
}
void remove(List** begin, List** end)
{
    List *ptr = *begin;
    List *previous = *begin;
    int id;
    cout << "Введите id узла который хотите удалить:";
    cin >> id;
    while (ptr != NULL)
    {
        if (ptr->crp.id == id)
        {
            if (ptr == *begin)
            {
                *begin = ptr->next;
            }
            if (ptr->next == NULL)
            {
                *end = previous;
            }
            if (begin == NULL)
            {
                end = NULL;
            }
            List *following = ptr->next;
            previous->next = following;
            delete ptr;
            return;
        }
        previous = ptr;
        ptr = ptr->next;
    }
}
void update(List* begin)
{
    List* ptr = begin;
    int id;
    cout << "Введите id узла который хотите редактировать:";
    cin >> id;
    while (ptr != NULL)
    {
        if (ptr->crp.id == id)
        {
            cout << "Модель автобуса:";
            cin >> ptr->crp.model_car;
            cout << "Имя водителя:";
            cin >> ptr->crp.name_driver;
            cout << "Фамилия:";
            cin >> ptr->crp.surname;
            cout << "Стоимость автобуса в $:";
            while (!(cin >> ptr->crp.price) || (ptr->crp.price) < 0)
            {
                cout << "\nОшибка ввода !!!" << endl;
                cout << "Некоректно введена цена либо не заполнен пункт." << endl;
                cout << "Cтоимость автобуса в $:";
            }
            cout << "Введите дату тех-обслуживания в формате д/м/гггг:" << endl;
            cout << "День:";
            while (!(cin >> ptr->crp.dtm.day) || (ptr->crp.dtm.day) > 30 || (ptr->crp.dtm.day) < 0)
            {
                cout << "\nОшибка ввода !!!\n";
                _getch();
                system("cls");
                cout << "Введен некоректный день либо пункт не заполне." << endl;
                cout << "День:";
            }
            cout << "Месяц:";
            while (!(cin >> ptr->crp.dtm.month) || (ptr->crp.dtm.month) > 12 || (ptr->crp.dtm.month) < 1)
            {
                cout << "\nОшибка ввода !!!\n";
                _getch();
                system("cls");
                cout << "Введен некоректный месяц либо пункт не заполне." << endl;
                cout << "Месяц:";
            }
            cout << "Год:";
            while (!(cin >> ptr->crp.dtm.year) || (ptr->crp.dtm.year) > 2018 || (ptr->crp.dtm.year) < 1913)
            {
                cout << "\nОшибка ввода !!!\n";
                _getch();
                system("cls");
                cout << "Введен некоректный год либо пункт не заполне." << endl;
                cout << "Год:";
            }
            cout << "Номер маршрута:";
            cin >> ptr->crp.route_number;
            cout << "Введите id узла:";
            cin >> ptr->crp.id;
        }
        ptr = ptr->next;
    }
}
void save_f(List* begin)
{
    ofstream fout("database.txt");
    if (fout)
    {
        List* tmp = begin;
        while (tmp != NULL)
        {
            fout << tmp->crp.model_car << " ";
            fout << tmp->crp.name_driver << " ";
            fout << tmp->crp.surname << " ";
            fout << tmp->crp.price << " ";
            fout << tmp->crp.dtm.day << " " << tmp->crp.dtm.month << " " << tmp->crp.dtm.year << " ";
            fout << tmp->crp.route_number << " ";
            fout << tmp->crp.id << " ";
            tmp = tmp->next;
        }
        fout.close();
    }
    else
        cout << "Ошибка записи в файл!!!" << endl;
}
void load_f(List** begin, List** end)
{
    List* tmp = new List;
    ifstream fin;
    fin.open("database.txt");
    if (!fin.is_open())
    {
        cout << "Такого файла не существует!!!" << endl;
        return;
    }
    while (!fin.eof())
    {

            fin >> tmp->crp.model_car;
            cout << tmp->crp.model_car << endl;
            fin >> tmp->crp.name_driver;
            cout << tmp->crp.name_driver << endl;
            fin >> tmp->crp.surname;
            cout << tmp->crp.surname << endl;
            fin >> tmp->crp.price;
            cout << tmp->crp.price << endl;
            fin >> tmp->crp.dtm.day;
            fin >> tmp->crp.dtm.month;
            fin >> tmp->crp.dtm.year;
            cout << tmp->crp.dtm.day << tmp->crp.dtm.month << tmp->crp.dtm.year << endl;
            fin >> tmp->crp.route_number;
            cout << tmp->crp.route_number << endl;
            fin >> tmp->crp.id;
            cout << tmp->crp.id << endl;
            add_f(begin, &tmp);
    }

}
void add_f(List** begin, List** end)
{
    if (!*begin)
    {
        (*end)->crp.model_car;
        (*end)->crp.name_driver;
        (*end)->crp.surname;
        (*end)->crp.price;
        (*end)->crp.dtm.day;
        (*end)->crp.dtm.month;
        (*end)->crp.dtm.year;
        (*end)->crp.route_number;
        (*end)->crp.id;
        (*end)->next = NULL;
        *begin = *end;
    }
    (*end)->next = new List;
    *end = (*end)->next;
    (*end)->crp.model_car;
    (*end)->crp.name_driver;
    (*end)->crp.surname;
    (*end)->crp.price;
    (*end)->crp.dtm.day;
    (*end)->crp.dtm.month;
    (*end)->crp.dtm.year;
    (*end)->crp.route_number;
    (*end)->crp.id;
    (*end)->next = NULL;
}
Answer 1

Эта ошибка стара как мир. Состояние файла при достижении конца как EOF возникает только ПОСЛЕ попытки считать информацию. В функции load_f нужно проконтролировать считывание первого поля.

  while ( ! fin . eof ( ) ) {
            fin >> tmp->crp.model_car;
            if ( fin . eof ( ) ) break ;
            cout << tmp->crp.model_car << endl;   
            fin >> tmp->crp.name_driver;
            cout << tmp->crp.name_driver << endl;
            ...
READ ALSO
Как расшифровать хеш?

Как расшифровать хеш?

Есть строка зашифрованная(std::hash)Как её можно расшифровать?

258
Как упростить b = !b

Как упростить b = !b

Я любитель очень красивого и оптимального программного кода, и, возможно, мой вопрос не совсем важныйВсем известно, что код:

194
TCP, гарантия доставки пакетов

TCP, гарантия доставки пакетов

Работаю с TCP и столкнулся с вопросом, который по факту упирается в понимание протокола

233