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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2011, 10:34   #1
J_D
Новичок
Джуниор
 
Регистрация: 28.05.2011
Сообщений: 1
По умолчанию Сортировка списка в бинарном файле

Программа вылетает при введении уже первого слова, не знаю уже что делать.

Код:
/***

Нельзя все содержание файла копировать в оперативную память.
Написать программу, которая реализует упорядоченный список с помощью таблицы.
В списке хранятся различные слова. Должна быть возможность список дополнить и распечатать.
Размер слова не превышает 20 символов. Размер таблицы - 100 записей.

***/

#include <stdio.h>
#include <fstream>
#include <iostream>
#include <cstring>

using namespace std;
const int NAME_SIZE = 20;
const int N=100;


class Vardi
{
private:
char name[NAME_SIZE+1];


public:
Vardi (const char *n = "")
{
strncpy (name, n, NAME_SIZE); name[NAME_SIZE+1]= '\0';

};
void setData()
{
    cout << "Vvedite slova (CTRL-Z, esli wse vvedeno):" << endl;
    cin>> name;
}

bool read (istream &fin)
{
    fin.read ((char*)this, sizeof(Vardi));
    return fin.good ();
};
// пока пользователь вводит слова, каждое слово сравнивается
//с теми которые есть в списке, если подходит по алфавиту,
//то вставляет слова пользователя туда, куда надо
//если нет, то слово записывается первым
void write (ostream &fout, istream &fin)
{
    string nameStr;
    string readStr;
    char* readChar;
    bool written = false;
    int i = 0;
    nameStr = name;
    while (fin.good())
    {
        fin.read((char*)readChar, sizeof(Vardi));
        readStr = readChar;
        if (readStr > nameStr)
        {
            fout.seekp(i*(NAME_SIZE+1));
            fout.write ((char*)this, sizeof(Vardi));
            written = true;
        }
        i++;
    }
    if (!written)
    {
        fout.write ((char*)this, sizeof(Vardi));
    }
};



void print()
{
cout<< name <<endl;
};

};
int main ()
{
int ok;
    int skaits=0;
Vardi v;


ifstream file("vardi.bin", ios::binary);
long nFileLen = 0;
if (file)
{
   file.seekg(0, ios::end);
   nFileLen = file.tellg();
   file.close();
}
cout<<"V fajle "<<nFileLen/21<<" slov!"<<endl;
cout<<"Vi mozhete vvesti eshhe "<<N-(nFileLen)/20<<" slov!"<<endl<<endl;


ofstream fout ("vardi.bin", ios::app);
ifstream fin ("vardi.bin");

v.setData();

while (!cin.eof())
    {
    v.write(fout, fin);
     v.setData();
     skaits++;
     if(skaits>=(N-(nFileLen)/21))
     {
         cout<<endl<<"Vi vveli boljshe, 4em "<<N<<" slov!!\n"; break;
     }

    };



fout.close ();
fout.clear();

cout<<endl<<"Slova v spiske: "<<endl;
while (v.read(fin)) v.print();


return 0;
}

Последний раз редактировалось J_D; 28.05.2011 в 10:38.
J_D вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск числа в бинарном файле. mazak Общие вопросы C/C++ 5 18.02.2010 12:05
Сортировка списка 4ika Общие вопросы C/C++ 3 27.11.2009 20:38
Сортировка списка [MI_nor] Общие вопросы C/C++ 10 05.05.2009 23:52
Сортировка списка Gonzo Помощь студентам 5 11.03.2009 11:08
Сортировка списка... Arkuz Помощь студентам 2 11.05.2008 00:53