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

Считывание из файла в массив структур - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Отрицательные десятичные дроби http://www.cyberforum.ru/cpp-beginners/thread785269.html
Здравствуйте! Встала такая проблема, мне необходимо заполнить массив отрицательными десятичными дробями. Возможно ли это?
C++ Ввести 3 числа, вывести их в порядке возрастания 1) "Считалочка" программа просит ввести число от 0 до 9 и выводит его письменно. Ввести 3 числа, вывести их в порядке возрастания. http://www.cyberforum.ru/cpp-beginners/thread785248.html
Работа с файлами и потоками C++
Здравствуйте! Проблема такая. В программе представлен связный список. Программа позволяет ввести в него данные записать их в файл, считать данные из файла в другой объект и вывести на экран. Почему то при записи появляется некое многозначное число, своей громоздкостью напоминающее адрес в памяти. Например, если я введу 12, 26 и затем 36. Потом запишу в файл, нажав 3. Затем считаю данные в другой...
Работа с функциями C++
Помогите пожалйста))) Очень нужно Задание: Вычислить Z = (X1 + Y1) / (Х2 - Y2), где Х1 и Х2 - корни уравнения 2x2 +x – 4=0; Y1 и Y2 – корни уравнения ay2 + 2у - 1 = 0. (Все корни действительные). Я пробовала но не очень понимаю как z записать. Впринципе програма работает но нужно еще раз вводить данные и мне кажется что это не совсем правильно работает програма. буду очень благодарна за...
C++ Заполнение строки через функцию http://www.cyberforum.ru/cpp-beginners/thread785240.html
Добрый день! При вызове функции f1 оператор cin.getline не срабатывает. На экране отображается одна пустая строка (следствие функции puts), после чего программа завершает работу. При использовании gets вместо cin.getline происходит тоже самое. Во второй функции f2 оператор cin срабатывает, но он не позволяет записать в массив string2 более одного слова. Это не подходит. Как мне сделать...
C++ найменшее общее кратное Ниже приведена программа на языке С. Перепишите ее в соответствии со стилем ввода/вывода C++. /* Преобразуйте эту программу на С в соответствии со стилем программирования C++. Эта программа подсчитывает наименьшее общее кратное V #include <stdio.h> int main(void) int a, b, d, min; printf ("Введите два числа:"}; подробнее

Показать сообщение отдельно
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
13.02.2013, 19:31     Считывание из файла в массив структур
Цитата Сообщение от zerO2hacK Посмотреть сообщение
лаба по структурному прогрммированию, так что без ООП
что именно проще будет?
в принципе, бинарный, имхо, проще. только нужно использовать для чтения метод read, а для записи - write.
Единственное, в файле вы ничего не сможете прочитать, только через свою программу. Плюс, запись и чтение всей структуры целиком одной командой. Я агитирую за бинарный )

Добавлено через 3 минуты
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
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
// binary.cpp -- бинарный файловый ввод-вывод
#include <iostream> // не требуется в большинстве систем
#include <fstream>
#include <iomanip>
#include <cstdlib> // (или stdlib.h) для exit()
inline void eatline() { while (std::cin.get() != '\n') continue; }
struct planet
{
    char name[20];      // название планеты
    double population;  // население
    double g;               // ускорение свободного падения
};
const char * file = "planets.dat";
int main()
{
    using namespace std;
    planet pl;
    cout << fixed << right;
    // показать начальное содержимое
    ifstream fin;
    fin.open(file, ios_base::in |ios_base::binary); // бинарный файл
    //Примечание: некоторые системы не принимают режим ios_base::binary
    if (fin.is_open())
    {
        cout << "Текущее содержимое файла "
              << file << ":\n";
        while (fin.read((char *) &pl, sizeof pl))
        {
            cout << setw(20) << pl.name << ": "
                  << setprecision(0) << setw(12) << pl.population
                  << setprecision(2) << setw(6) << pl.g << endl;
        }
        fin.close();
    }
    // добавить новые данные
    ofstream fout(file,
    ios_base::out | ios_base::app | ios_base::binary);
    //Примечание: некоторые системы не принимают режим ios::binary
    if (!fout.is_open())
    {
        cerr << "Не удается открыть файл " << file << " для вывода:\n";
        exit(EXIT_FAILURE);
}
    cout << "Введите название планеты (или пустую строку для завершения):\n";
    cin.get(pl.name, 20);
    while (pl.name[0] != '\0')
    {
        eatline();
        cout << "Введите численность населения планеты: ";
        cin >> pl.population;
        cout << "Введите ускорение свободного падения планеты: ";
        cin >> pl.g;
        eatline();
        fout.write((char *) &pl, sizeof pl);
        cout << "Введите название планеты (или пустую строку для завершения):\n ";
        cin.get(pl.name, 20);
    }
    fout.close();
    // показать измененный файл
    fin.clear(); // не обязательно в некоторых реализациях, но не помешает
    fin.open(file, ios_base::in | ios_base::binary);
    if (fin.is_open())
    {
        cout << "Новое содержимое файла "
              << file << ":\n";
        while (fin.read((char *) &pl, sizeof pl))
        {
            cout << setw(20) << pl.name << ": "
                  << setprecision(0) << setw(12) << pl.population
                  << setprecision(2) << setw(6) << pl.g << endl;
        }
        fin.close();
    }
    cout << "Готово.\n";
    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
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
#include <iomanip>
#include <cstdlib>      // (или stdlib.h) для exit()
const int LIM = 20;
struct planet
{
    char name[LIM];         // название планеты
    double population;  // население
    double g;               // ускорение свободного падения
};
const char * file = "planets.dat";  // ПРЕДПОЛАГАЕТСЯ, ЧТО СУЩЕСТВУЕТ                                               // (пример binary.cpp)
inline void eatline() { while (std::cin.get() != '\n') continue; }
int main()
{
    using namespace std;
planet pl;
cout << fixed;
// показать начальное содержимое
fstream finout;         // читать и писать потоки
finout.open(file,
ios_base::in | ios_base::out | ios_base::binary);
//ПРИМЕЧАНИЕ: некоторые системы Unix требуют опустить | ios::binary
int ct = 0;
if (finout.is_open())
{
    finout.seekg(0); // перейти в начало
        cout << "Текущее содержимое файла "
          << file << ":\n";
        while (finout.read((char *) &pl, sizeof pl))
        {
            cout << ct++ << ": " << setw(LIM) << pl.name << ": "
                  << setprecision(0) << setw(12) << pl.population
                  << setprecision(2) << setw(6) << pl.g << endl;
        }
        if (finout.eof())
            finout.clear(); // очистить флаг eof
        else
        {
            cerr << "Ошибка чтения " << file << ".\n";
            exit(EXIT_FAILURE);
        }
    }
    else
    {
        cerr << file << " файл не может быть открыт -- завершение.\n";
        exit(EXIT_FAILURE);
    }
    // изменить запись
    cout << "Введите номер записи, которую нужно изменить: ";
    long rec;
    cin >> rec;
eatline(); // избавиться от символов новой строки
    if (rec < 0 || rec >= ct)
    {
        cerr << "Неверный номер записи -- завершение.\n";
exit(EXIT_FAILURE);
    }
    streampos place = rec * sizeof pl;  // преобразовать в тип streampos
    finout.seekg(place);                    // произвольный доступ
    if (finout.fail())
    {
        cerr << "Ошибка при попытке перемещения указателя\n";
        exit(EXIT_FAILURE);
    }
    finout.read((char *) &pl, sizeof pl);
    cout << "Ваш выбор:\n";
    cout << rec << ": " << setw(LIM) << pl.name << ": "
          << setprecision(0) << setw(12) << pl.population
          << setprecision(2) << setw(6) << pl.g << endl;
    if (finout.eof())
        finout.clear(); // очистить флаг eof
    cout << "Введите название планеты: ";
    cin.get(pl.name, LIM);
    eatline();
    cout << "Введите население планеты: ";
    cin >> pl.population;
    cout << "Введите ускорение свободного падения: ";
    cin >> pl.g;
    finout.seekp(place);    // вернуться назад
    finout.write((char *) &pl, sizeof pl) << flush;
    if (finout.fail())
    {
        cerr << "Ошибка при попытке записи\n";
        exit(EXIT_FAILURE);
    }
    // показать измененный файл
    ct = 0;
    finout.seekg(0);        // перейти в начало файла
    cout << "Новое содержимое файла " << file
          << ":\n";
    while (finout.read((char *) &pl, sizeof pl))
    {
        cout << ct++ << ": " << setw(LIM) << pl.name << ": "
              << setprecision(0) << setw(12) << pl.population
              << setprecision(2) << setw(6) << pl.g << endl;
    }
    finout.close();
    cout << "Готово.\n";
    return 0;
}
 
Текущее время: 21:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru