Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2009, 21:11   #1
mazak
Пользователь
 
Аватар для mazak
 
Регистрация: 10.07.2009
Сообщений: 29
По умолчанию Потоки и файлы

Программа работает, но не так как хотелось бы или должно быть по учебнику.
Стр. 561 Лафоре . ООП в С++.
PHP код:
#include <fstream>
#include <iostream>

using namespace std;
class 
person
{
    protected:
    
char name[80];
    
int age;
    public:
    
void getData()
    {
    
cout<<"\n vvedite imja: ";
     
cin>>name;
    
cout<<" Vvedite vosrast: "cin>>age;
    }
    
void showData()
    {
        
cout<<" \n Imja: "<<name;
        
cout<<" \n Vosrast:"<<age;
    }
};
////////////////////////////////////////////
int main()
{
    
char ch;
    
person pers;
    
fstream file;

    
file.open("GROUP.DAT"ios::app ios::out ios::in ios::binary);
    do
    {
        
cout<<" \n Vvedite danie o cheloveke: ";
        
pers.getData();
        
file.writereinterpret_cast<char*>(&pers), sizeof(pers) );
        
cout<<" Prodolgit vvod (y/n)?";
        
cin>>ch;
    }
    while(
ch=='y');
    
file.seekg(0);
    
file.readreinterpret_cast<char*>(&pers),sizeof(pers));

    while(!
file.eof())
    {
        
cout<<" \n Persona: ";
        
pers.showData();
        
file.read(reinterpret_cast<char*>(&pers),sizeof(pers));
    }
    
cout<<endl;
    return 
0;

в частности вот эта строка


Код HTML:
file.open("GROUP.DAT", ios::app | ios::out | ios::in | ios::binary);
запись не производится
если я сделаю вот так :
Код HTML:
 file.open("c:\\GROUP.txt");
то запись производится но, какими то кракозябами
подключая битовые режимы из верхнего варианта
ios::app | ios:: out | ios::in | ios::binary
запись не производится .
Кстати прога уплывает в конце в бесконечный цикл
Будьте добры просветите что я не понял .
С уважением MAZAK.
Благими намерениями вымощена дорога в ад

Последний раз редактировалось mazak; 26.07.2009 в 21:15.
mazak вне форума Ответить с цитированием
Старый 26.07.2009, 22:33   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
в частности вот эта строка


Код HTML:
file.open("GROUP.DAT", ios::app | ios:ut | ios::in | ios::binary);
запись не производится
Хм... странно должно работать.

Цитата:
если я сделаю вот так :
Код HTML:
file.open("c:\\GROUP.txt");
то запись производится но, какими то кракозябами
Это естественно, вы же в файл пишите поток битов, а не простой текст. Попробуйте так:

Код:
    while(file.read(reinterpret_cast<char*>(&pers),sizeof(pers)))
    {
        cout<<" \n Persona: ";
        pers.showData();
    }

Последний раз редактировалось profi; 26.07.2009 в 22:37.
profi вне форума Ответить с цитированием
Старый 28.07.2009, 18:23   #3
rangerx
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 46
По умолчанию

Код:
#include <fstream>
#include <iostream>

using namespace std;

class person
{
    protected:
        char name[80];
        int age;

    public:
        void getData()
        {
            cout<<"\n vvedite imja: ";
            cin>>name;
            cout<<" Vvedite vosrast: "; cin>>age;
        }
        void showData()
        {
            cout<<" \n Imja: "<<name;
            cout<<" \n Vosrast:"<<age;
        }
};
////////////////////////////////////////////
int main()
{
    char ch;
    person pers;
    fstream file;

    file.open("GROUP.DAT", ios::ate | ios::out | ios::in | ios::binary);
    do
    {
        cout<<" \n Vvedite danie o cheloveke: ";
        pers.getData();
        file.write( reinterpret_cast<char*>(&pers), sizeof(pers) );
        cout<<" Prodolgit vvod (y/n)?";
        cin>>ch;
    }
    while(ch=='y');

    file.seekg(0);
    while(!file.eof())
    {
        file.read(reinterpret_cast<char*>(&pers), sizeof(pers));
        if(file.eof()) break;
        cout<<" \n Persona: ";
        pers.showData();
    }

    cout<<endl;
    return 0;
}
rangerx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Firebird и Потоки Lion-Tiger БД в Delphi 1 12.06.2009 22:05
Builder C++ бинарные потоки,файлы Yakushov C++ Builder 1 21.12.2008 11:55
Потоки AidarBik Win Api 2 04.08.2008 10:00
Потоки в С Raptor Помощь студентам 1 07.01.2008 21:12