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

Подредактируйте программу. - C++

Восстановить пароль Регистрация
 
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
09.02.2012, 17:56     Подредактируйте программу. #1
Добрый всем вечер! Хочу помочь одному человеку написать программку на СИ++. Но наткнулся на непонятную ошибку Программка успешно компилируется, без каких-либо ошибок.
Вот задание:
Для получeния местa в общежитии фoрмируется списoк студентoв, котoрый включает: Ф. И. О. студeнтa, нoмeр группы (буква и че-тыре цифры), срeдний балл, доход на oднoгo членa сeмьи. Обще-житие в первую oчередь предoставляется тем студeнтам, у которых доход на члена семьи меньше двух минимальных зaрплат, затем остaльным в порядке уменьшения среднего бaлла. Для описания списка студентов в программе необходимo использовать тип данных структура. Для хрaнения списка студентов создать бинарный файл, oриентированный на тип данных структура. Предусмотреть в прoграмме прoсмотр бинарногo файла и выполнить его обработку: вывести списoк очереднoсти предоставления мест в общежитии.

Заранее скажу, я НЕ хочу чтобы вы писали мне задачу. Я попытаюсь это сделать сам. Подкорректируйте просто =)
вот мой код:
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
#include <iostream>
#include <iomanip>          
using namespace std;      
int main()      
{      
          struct studenti
         {      
          char *fio;
          char *number;    
          int sredniybal;
          int dohod;     
         };      
         cout << "Vvedite kov-vo studentov: ";      
         int n;      
         cin >> n;      
         studenti* inf;      
         inf = new studenti[n];      
       for(int i = 0; i < n; i++)      
         {      
       cout << "Vvedite F.I.O.: ";
       inf[i].fio = (char *)malloc(128);
       cin >> inf[i].fio;      
       cout << "Vvedite nomer: ";
       inf[i].fio = (char *)malloc(128);
       cin >> inf[i].number;     
       cout << "Vvedite srednij bal: ";
       cin >> inf[i].sredniybal;
       cout << "Vvedite dohod: ";
       cin >> inf[i].dohod;      
         }      
       for(int i = 0; i < n; i++)
         {      
           cout << inf[i].fio << '\t' 
                << inf[i].number << '\t' 
                << inf[i].sredniybal << '\t' 
                << inf[i].dohod << endl;      
         }          
      system("pause");
        return 0;      
}
Только не кидайте в меня камнями, я только начинающий программист!

Добавлено через 1 минуту
Ой, совсем забыл...кому не сложно, объясните как связать все это с бинарным файлом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2012, 17:56     Подредактируйте программу.
Посмотрите здесь:

C++ Нужно программу на Паскале переделать в программу на С++
C++ Соединить консольную программу и программу с GUI
Переделать программу 1 в программу 2 с использованием функций C++
Подредактируйте программу (структуры). C++
Как заставить программу запустить другую программу C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
09.02.2012, 18:28     Подредактируйте программу. #2
Цитата Сообщение от Вася1q Посмотреть сообщение
кому не сложно, объясните как связать все это с бинарным файлом?
Юрец, в плюсах поток чтения ifstream поток записи ofstream
хочешь бинарку ставь флаг ios::binary
вот например открытие бинарного потока записи
C++
1
ofstream ofs("binary.txt",ios::binary);
И да не забывай для потоков подключить <fstream> а то компилятор скажет что ofstream и ifstream не объявлены

Я так и не понял у тебя вроди был класс пациентов тут файл со студентами, эт всё одно задание или два разных???Давай излагай задание
Серега_EX
15 / 15 / 0
Регистрация: 09.02.2012
Сообщений: 30
09.02.2012, 18:30     Подредактируйте программу. #3
в структуре char* использовать не желательно, после того как запишешь в файл ты не будешь знать сколько байтов тебе считывать на одного студента, причем что кол-во информации на каждого будет разная, для записи файлов используй fstream и функции read и write
-=ЮрА=-
Заблокирован
Автор FAQ
09.02.2012, 18:33     Подредактируйте программу. #4
Цитата Сообщение от Вася1q Посмотреть сообщение
inf[i].fio = (char *)malloc(128);
- память в плюсах выделяется оператором new, такс лучше напишу тебе кое какой код...
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
09.02.2012, 18:36  [ТС]     Подредактируйте программу. #5
А мэлок это в чистом СИ да?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
09.02.2012, 18:40     Подредактируйте программу. #6
Цитата Сообщение от Серега_EX Посмотреть сообщение
в структуре char* использовать не желательно, после того как запишешь в файл ты не будешь знать сколько байтов тебе считывать на одного студента
ну не все так плохо. можно же писать в файл длину фио блока, либо установить фиксированный максимальный размер, например так

Код
   N   |   фио   |  группа  |  балл  |  доход
------- --------- ---------- --------- --------
1 байт |  N байт |  5 байт  | 1 байт | 4 байт
или так

Код
    фио  |  группа  |  балл  |  доход
--------- ---------  -------- --------
128 байт |  5 байт  | 1 байт | 4 байт
-=ЮрА=-
Заблокирован
Автор FAQ
09.02.2012, 18:49     Подредактируйте программу. #7
Вася1q, лови
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
struct student
{      
    char fio  [32];//ÔÈÎ
    char group[16];//ÒåêñòîâГ*Гї Г*áðèâåГ*ГІГіГ°Г* ãðóïïû    
    int sredniybal;//
    int dohod;     
};   
 
int main()
{
    long i, n;
    cout<<"enter number of students :  ";
    cin>>n;
    student * inf = new student[n];
    for(i = 0; i < n; i++)
    {
        cin.ignore();//Ïðîïóñòèëè \n îò ââîäГ*
        cout << "Vvedite F.I.O.:\n";
        cin.getline(inf[i].fio,32);//Г’Г*ГЄ ìîæГ*Г® Г±Г·ГЁГІГ*ГІГј ââîä Г± ïðîáåëГ*ìè
        cout << "Vvedite gruppy: ";
        cin.getline(inf[i].group,16);
        cout << "Vvedite srednij bal: ";
        cin >> inf[i].sredniybal;
        cout << "Vvedite dohod: ";
        cin >> inf[i].dohod;
    }
    for(i = 0; i < n; i++)
    {
        cout << inf[i].fio   <<" " 
             << inf[i].group<<" " 
             << inf[i].sredniybal<<" " 
             << inf[i].dohod<< endl;
    }
    system("pause");
    delete [] inf;
    return 0;
}
Миниатюры
Подредактируйте программу.  
-=ЮрА=-
Заблокирован
Автор FAQ
09.02.2012, 18:54     Подредактируйте программу. #8
Цитата Сообщение от Вася1q Посмотреть сообщение
Ой, совсем забыл...кому не сложно, объясните как связать все это с бинарным файлом?
Перед циклом
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ofstream ofs("binary.txt",ios::binary);
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(i = 0; i < n; i++)
* * * * {
* * * * * * * * cout << inf[i].fio* * * *<<" "
* * * * * * *<< inf[i].group<<" "
* * * * * * *<< inf[i].sredniybal<<" "
* * * * * * *<< inf[i].dohod<< endl;
ofs << inf[i].fio* * * *<<" "
* * * * * * *<< inf[i].group<<" "
* * * * * * *<< inf[i].sredniybal<<" "
* * * * * * *<< inf[i].dohod<< endl;
* * * * }
ofs.close();//После цикла

Добавлено через 2 минуты
Возможно лучше ещё перед циклом в файл записать число студентов, тобишь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ofstream ofs("binary.txt",ios::binary);
ofs<<n<<endl;
for(i = 0; i < n; i++)
        {
                cout << inf[i].fio       <<" " 
             << inf[i].group<<" " 
             << inf[i].sredniybal<<" " 
             << inf[i].dohod<< endl;
               //вот пошла запись в файл
             ofs << inf[i].fio       <<" " 
             << inf[i].group<<" " 
             << inf[i].sredniybal<<" " 
             << inf[i].dohod<< endl;
        }
ofs.close();
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
09.02.2012, 18:57  [ТС]     Подредактируйте программу. #9
Спасибо)) от всей души!
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
09.02.2012, 18:57     Подредактируйте программу. #10
-=ЮрА=-, форматированный i/o и бинарные файлы говорите... как мило
-=ЮрА=-
09.02.2012, 21:37
  #11

Не по теме:

retmas,

Цитата Сообщение от retmas Посмотреть сообщение
форматированный i/o и бинарные файлы говорите
- не нравится что ofs.write не использовал, ну дык и человек только осваивает чтение/запись, я ему просто голову вообще забью. PS:Не нужно думать, что я какой-нибудь профан, достало уже...

retmas
09.02.2012, 22:48
  #12

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
не нравится что ofs.write не использовал, ну дык и человек только осваивает чтение/запись, я ему просто голову вообще забью
скорее вы ему забьете голову тем, что использовать не следует. не думаю, что он будет в восторге в один прекрасный момент от непонимания, почему его >>/<< "не работают как надо". а если уж ТС полез в бинарные форматы, то ему следует осознавать, что это такое и "с чем его едят"

-=ЮрА=-
Заблокирован
Автор FAQ
09.02.2012, 23:33     Подредактируйте программу. #13
retmas, давай не будешь учить меня что делать и как преподносить тот или иной аспект людям!Хочешь показать знания напиши код и укажи что именно осталось за кадром...
Yandex
Объявления
09.02.2012, 23:33     Подредактируйте программу.
Ответ Создать тему
Опции темы

Текущее время: 21:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru