Форум программистов, компьютерный форум 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 ("Введите два числа:"}; подробнее

Показать сообщение отдельно
zerO2hacK
1 / 1 / 0
Регистрация: 06.03.2012
Сообщений: 72
13.02.2013, 10:38     Считывание из файла в массив структур
Доброго времени суток!

Есть структура:
C++
1
2
3
4
5
6
7
8
9
10
11
struct iDiscipline{
        char name[10];
        int num_course;
        int num_term;
        int am_lec;
        int am_pr;
        int am_lab;
        int am_one;
        int am_ALL;
        char form[1]; //e-exam || t-test
}disciplines[MAX]={'\0'};
и файл типа:
Кол-во записей: 2
Номер: |0||1|
Наименование: |mat||ter|
Номер курса; |1||1|
Номер семестра: |1||1|
Лекции (ч): |1||1|
Практика (ч): |1||1|
Лабы (ч): |1||1|
Сам.раб. (ч): |1||1|
ВСЕГО (ч): |4||4|
Форма отчета: |t||e|
и функция считывания из файла:
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
void fload(){
    clear();//чистим всю структуру
    int am=0;
    char name[10];
    cout<<"Введите имя файла - ";cin>>name;
    ifstream f;
    f.open(name);
    //
    f.seekg(16)>>am;
    //for (int i=0; i<am; i++) f.seekg(36+i)>>"| ">>i>>"  |";
    int dop=0;
    for (int i=0; i<am; i++){
        int j=0;
        do f.seekg(51+3*am+i+1)>>disciplines[i].name[j++]; while (f>>"|");
        dop+=j;
    }
    for (int i=0; i<am; i++) f.seekg(68+2*am+dop+i+1)>>disciplines[i].num_course;
    for (int i=0; i<am; i++) f.seekg(85+3*am+dop+i+1)>>disciplines[i].num_term;
    for (int i=0; i<am; i++) f.seekg(102+4*am+dop+i+1)>>disciplines[i].am_lec;
    for (int i=0; i<am; i++) f.seekg(119+5*am+dop+i+1)>>disciplines[i].am_pr;
    for (int i=0; i<am; i++) f.seekg(136+6*am+dop+i+1)>>disciplines[i].am_lab;
    for (int i=0; i<am; i++) f.seekg(153+7*am+dop+i+1)>>disciplines[i].am_one;
    for (int i=0; i<am; i++) f.seekg(170+8*am+dop+i+1)>>disciplines[i].am_ALL;
    for (int i=0; i<am; i++) f.seekg(187+9*am+dop+i+1)>>disciplines[i].form[0];
    //
    f.close();
}
Сперва думал как мне перепрыгивать ненужные слова...сразу к числам, названиям - нашел функцию tellg()...пошаманил с ней чуток.

Выбивает ошибку в этом куске:
C++
1
2
3
4
5
for (int i=0; i<am; i++){
        int j=0;
        do f.seekg(51+3*am+i+1)>>disciplines[i].name[j++]; while (f>>"|");
        dop+=j;
    }
Мол, бинарный ">>": не найден оператор, принимающий левый операнд типа "std::ifstream" (или приемлемое преобразование отсутствует).

В чем косяк то, прошу помощи

Добавлено через 3 минуты
переменная am: кол-во записей
dop: это кол-во символов в названиях дисциплин

Добавлено через 5 минут
ну и на всякий, функция записи в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void fsave(){
    char name[10];
    int am=0;
    cout<<"Введите имя файла - ";cin>>name;
    ofstream f;
    f.open(name);
    f<<"Кол-во записей: "; for (int i=0; i<MAX; i++) if (disciplines[i].name[0]) am++; f<<am<<endl;
    f<<"Номер:           "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<i<<"|";}
    f<<endl<<"Наименование:    "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].name<<"|"; }
    f<<endl<<"Номер курса;     "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].num_course<<"|";}
    f<<endl<<"Номер семестра:  "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].num_term<<"|";}
    f<<endl<<"Лекции (ч):      "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].am_lec<<"|"; }
    f<<endl<<"Практика (ч):    "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].am_pr<<"|"; }
    f<<endl<<"Лабы (ч):        "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].am_lab<<"|";}
    f<<endl<<"Сам.раб. (ч):    "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].am_one<<"|"; }
    f<<endl<<"ВСЕГО (ч):       "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].am_ALL<<"|";}
    f<<endl<<"Форма отчета:    "; for (int i=0; i<MAX; i++) {if (disciplines[i].name[0]) f<<"|"<<disciplines[i].form[0]<<"|";}
    f<<endl;
    f.close();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru