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

Нужен иной метод чтения структуры из файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить значения функции на интервале http://www.cyberforum.ru/cpp-beginners/thread102921.html
как это решается напишите прогу Функцияy = tg(x) диапазон изменения аргумента(x >= -2*pi) && (x <= 2*pi) шаг изменения аргумента h = pi/4
C++ Класс. Строка. Чтение из файла. Добрый день. Возникла проблемка. #include <iostream> using namespace std; class zdanie { int plosh, obm; char *adres, *vladelec; public: http://www.cyberforum.ru/cpp-beginners/thread102913.html
C++ ИССЛЕДОВАНИЕ ИСПОЛЬЗОВАНИЯ подпрограмм В линейной структуры ДАННЫХ
Народ, я блин уже не знаю сколько всего перечитал...но вот дошел до этой задачи и всё...не могу.Не доганяю. Кто понимает в Си помогите решить...пожалуйста. 1. Создание заглавного файла (с расширением. H). В файле описывается: - Линейная структура данных в связанном представлении (список), элемент которой имеет тип согласно варианту табл. 1; - Открытая подпрограмма (inline-функция) в...
C++ Калькулятор
Я недавно только начал учить с++ и не могу понять что в программе не так, попытался сделать калькулятор, но почему та на первом же ифе выдаёт ошибку, может кто сказать чё не так? #include <cstdlib> #include <iostream> #include <math.h> #include <conio.h> using namespace std; float vvod(float a,char z,float b) {float otv; if (z=="+")
C++ ввод матрицы 3х3 http://www.cyberforum.ru/cpp-beginners/thread102853.html
нада написать прогу для ввода матрици 3х3 с клавиатуры
C++ shared_ptr и приватный деструктор Хочу перенести деструктор в приватные члены класса A, но класс используется в boost::shared_ptr<A> и boost::weak_ptr<A>. Какой класс описать в качестве friend class? подробнее

Показать сообщение отдельно
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
10.03.2010, 19:29     Нужен иной метод чтения структуры из файла
Это то что у меня есть на данный момент, но судя по сегодняшней лекции нужно еще сделать тожесамое но уже читая не элементы структуры а весь обьект структуры, типа cin >> mas[i].name >> mas[i].hight; заменмть на cin >> mas[i]; Вот только проблема в том что я не понял как это сделать, а по форуму есть только тот вариант который у меня и так есть..

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
/*
    Кожен рядок файлу містить назву гірської вершини і її висоту. Використовуючи
    структуру для опису поняття вершина, одержати назву найвищої вершини за 
    даними файлу.
*/
 
#include <iostream>
#include <string>
#include <windows.h>
 
#define FOR(i,a,b) for (int i = (a), _n(b); i < _n; ++i)
 
using namespace std;
 
struct element
{
    string name;
    int hight;
};
 
int main()
{
    freopen("in.txt","r",stdin);
    int n;
    cin >> n;
    element *mas = new element[n];
    int max = -1, in;
    FOR(i,0,n)
    {
        cin >> mas[i].name >> mas[i].hight;
        if ( mas[i].hight > max ) { max = mas[i].hight; in = i; }
    }
    cout << mas[in].name << endl;
    Sleep(2000);
    return 0;   
}
Добавлено через 1 час 13 минут
В принцыпе была идея использовать fread() но она читает последовальный блок, а так как названия вершин у меня имеют разные длины строк я не пойму как это можно осуществить..

Добавлено через 1 час 39 минут
вот что у меня вышло:
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
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
 
using namespace std;
 
struct element
{
    string name;
    int height;
    friend istream &operator >> (istream &in, element &obj)
    {
        in >> obj.name >> obj.height;
        return in;
    }
};
 
int main()
{
    ifstream file;
    file.exceptions ( ifstream::eofbit | ifstream::failbit | ifstream::badbit );
    int n, i = 0, in, max = -(1<<25);
    element *mas;
    try 
    {
        file.open ("in.txt", ifstream::in);
        file >> n;
        mas = new element[n];
        while (n--)
        {
             file >> mas[i++];
             if (max < mas[i-1].height) { max = mas[i-1].height; in = i-1; }
        }
        cout << mas[in].name << endl;
    }
    catch (ifstream::failure e)
    {
        cout << "Exception opening/reading file";
    }
    file.close();
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru