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

Запись и чтение бинарных файлов. Программа крашится при закрытии консольного окна - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подскажите пример подключения lib http://www.cyberforum.ru/cpp-beginners/thread1252627.html
Добрый вечер. Можно пример какой-нибудь простенькой программы (например сложение чисел, или вычисление площади треугольника), в которой main.cpp отвечает за ввод и вывод, а в dop.lib реализуется сам метод. И как это все в кучу складывается.
C++ Перегрузить operator* Подскажите, пожалуйста, как использовать operator* в void main в данной программе по аналогии с operator-> Не разобрался полностью в синтаксисе. #include <iostream> using namespace std; class A { public: http://www.cyberforum.ru/cpp-beginners/thread1252616.html
C++ Вернуть текстовое представление уравнения в виде строки
последний пункт задания лабы: Вернуть текстовое представление уравнения в виде строки (char или wchar_t). уравнение такое (x^2+y^2-4a^2)^3=108a^4y^2
Программа не записывает данные в файл C++
Программа не записывает данные в файл помогите исправить #include<iostream> #include <stdio.h> #include <stdlib.h> #include<iomanip> #include<windows.h> using namespace std; struct stud {
C++ Объясните как работает программа, которая заменяет 2 и больше подряд идущих пробела на один http://www.cyberforum.ru/cpp-beginners/thread1252598.html
Всем доброго времени суток, друзья. Прошу обьяснить мне как работает данная программа, потому как сам не могу додуматься. #include <stdio.h> main () { int c, p; p = 0; while ((c = getchar()) != EOF) { if (c != ' ') p=0;
C++ Определить, есть ли в строке St изображения нечетных чисел Определить, есть ли в строке St изображения нечетных чисел. подробнее

Показать сообщение отдельно
trev
 Аватар для trev
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 13
08.09.2014, 20:14  [ТС]     Запись и чтение бинарных файлов. Программа крашится при закрытии консольного окна
Цитата Сообщение от alsav22 Посмотреть сообщение
int length = name.size();
здесь точно все правильно? не
C++
1
length = name.length()
Добавлено через 7 минут
сори, туплю.. это одно и тоже..)

Добавлено через 1 час 6 минут
Выкладываю готовый вариант, может кому пригодится
Благодарю за помощь!
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
//определение класса
//person.h
#include <string>
#include <iostream>
#include <fstream>
 
#ifndef PERSON_H_
#define PERSON_H_
 
 
const char *file = "d://person.bin";
 
class Person {
    std::string name;
    int age;
    int height;
public:
    //конструкторы
    Person() 
        : name("nobody"), age(0), height(0) { }
    Person(const std::string &name_, int age_ = 0, int height_ = 0)
        : name(name_), age(age_), height(height_) { }
    Person(const Person &ps)
        : name(ps.name), age(ps.age), height(ps.height) { }
    //методы bin_write и bin_read
    void bin_write() const {
        std::ofstream fout(file,
            std::ios_base::out | std::ios_base::app | std::ios_base::binary);
        if (!fout.is_open()) {
            std::cerr << "ERROR\n";
            exit(EXIT_FAILURE);
        }
        else {
            unsigned int len = name.size();
            fout.write((char *)&len, sizeof(len));          //записываем длину строки
            fout.write((char *)name.c_str(), name.size());  //записываем строку
            fout.write((char *)&age, sizeof(age));
            fout.write((char *)&height, sizeof(height));
            fout.close();
        }
    }
    void bin_read() {
        std::ifstream fin;
        fin.open(file, std::ios_base::in | std::ios_base::binary);
        if (fin.is_open()) {
            std::cout << "Данные в файле \"" << file << "\":\n";
            unsigned int kol = 1;
            do {
                int len;
                fin.read((char *)&len, sizeof(len));
                if (fin.eof())
                    break;
                char *cstr = new char[len + 1];
                fin.read((char *)cstr, len);
                cstr[len] = '\0';
                name = cstr;
                delete[] cstr;
                fin.read((char *)&age, sizeof(age));
                fin.read((char *)&height, sizeof(height));
                std::cout << kol << ") " << name
                    << ", возраст: " << age
                    << ", рост: " << height << '\n';
                kol++;
            } while (fin.good());
            fin.close();
        }
    }
    //деструктор
    ~Person() { }
};
#endif // !PERSON_H_
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//main.cpp
#include "stdafx.h"
#include "Person.h"
#include "ctime"
 
int main() {
    setlocale(0, "");
    std::srand(time(NULL));
    Person *man = new Person[4];
    man[0] = Person("Maks", 15 + rand() % 20, 120 + rand() % 100);
    man[1] = Person("Stas", 15 + rand() % 20, 120 + rand() % 100);
    man[2] = Person("Rost", 15 + rand() % 20, 120 + rand() % 100);
    man[3] = Person("Volod'ka", 20 + rand() % 30, 120 + rand() % 100);
    for (int i = 0; i < 4; i++) {
        man[i].bin_write();
        if (i == 3)
            man[i].bin_read();
    }
    system("pause");
    return 0;
}
 
Текущее время: 10:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru