Чтобы препод мог нормально исходник компилить.
П.С. в цикле есть ошибка, в том который определяет кол-во строк (он был бесконечным).
Пришлой включить мозг и отшлейфовать немного =))
Спасибо тебе за наводку.
» Исходник 100% работает на bc++ v3.1 «
Code
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
#include <io.h>
//using namespace std;
#define filename "1.txt" //файл из которого читаем данные
#define filename2 "2.txt" //файл в который записываем данные
#define ID 4
#define DATA 9
#define TIME 6
#define NAME 12
//---------
//Описание структуры
//---------
struct ychet
{
unsigned int id; //char ID[ID];
char data[DATA];
char time[TIME];
char name[NAME];
};
//---------
//Описание Функциий
//---------
void sort(const ychet* data); //Сортировка, первый параметр - указатель на массив данных,
//---------
//Описание глобальных переменных
//---------
int count=0; //Счетчик
int lenght=0; //Длинна массива
//---------
//Основное тело программы
//---------
int main()
{
char s[40], temp_id[11]; //максимальное значение ID из файла - до 10 цифр (можно выставить и больше)
ifstream fin; //Объявляем поток для чтения из файла
fin.open(filename); //Открываем дайл для чтения
if (!fin)
cout << "Не удалось открыть файл ychet.txt для чтения\n";
else {
while(!fin.eof()) //Считаем кол-во строк в файле для определения общего числа блоков данных
{ //Пришлось изменить цикл, в прежнем виде он был бескончным т.к. не читал файл
fin >> s; //и соответственно не мог достигнуть конца файла
lenght++;
}
}
fin.clear(); //Обнуляем все биты состояния потока
fin.seekg(0); //Возвращаемся на начало файла
lenght /=4;
ychet* Data=new ychet[lenght]; //Выделяем память под массив для хранения блоков данных
while(fin.getline(temp_id,0x11)) //Пока идет ввод:
{ //...считываем из файла строку с ID во временную переменную...
Data[count].id=atoi(temp_id); //...приводим ID к числовому значению и заносим в массив...
fin.getline(Data[count].data,10); //...заносим в массив поле DATA из файла...
fin.getline(Data[count].time,7); //...TIME...
fin.getline(Data[count].name,13); //...NAME
count++; //...увеличиваем счетчик на 1
};
fin.close(); //Закрываем поток для чтения файла
sort(Data); //Сортировка
delete [] Data; //Освобождаем память, выделенную для массива
return 0;
}
//---------
//Функция сортировки
//---------
void sort(const ychet* Data)
{
int* index=new int[count]; //Выделяем память под индексный массив...
for (int a=0;a<count;a++) //...заполняем его элементами от 0 до lenght
index[a]=a;
int tmp; //Переменная для временного хранения значения элемента индексного массива
for(int i = 0; i <= count-1; i++) //Сортировка методом "пузырька" с использованием индексного массива
{
for(int j = 0; j <= count-2-i; j++)
{
if( Data[index[j]].id>Data[index[j+1]].id )
{
tmp = index[j];
index[j] = index[j+1];
index[j+1] = tmp;
}
}
}
ofstream fout; //Объявляем поток для записи в файл
fout.open(filename2,ios::out); //Открываем файл для записи
for (a=0;a<count;a++) //Записываем в файл блоки данных, отсортированные по полю ID
{
fout<<Data[index[a]].id<<endl;
fout<<Data[index[a]].data<<endl;
fout<<Data[index[a]].time<<endl;
fout<<Data[index[a]].name<<endl;
}
delete [] index; //Освобождаем память, выделенную для индексного массива
}