Добрый вечер дана задача реализации длинной вещественной арифметике использую пергрузку. Возникает ошибка при чтении второго числа, что-то с открытием файла, посмотрите пожалуйста вот прога
Код:
/*
реализация длинной вещественной арифметики
*/
#include "stdafx.h"
#include "cstring"
#include "iostream"
#include "fstream"
#include "math.h"
using namespace std;
//===============================================================================
// описание глобальных данных
//===============================================================================
ifstream in; //файловая переменная для ввода
ofstream out; //файловая переменная для вывода
const int count = 5; //максимальная разрядность числа
class longfloat //класс длинное вещественное
{
public:
int chislo[5]; //число
bool znak; //знак true=+, false=-
int por; //порядок числа
int len; //длина числа
friend istream& operator>>(istream& file, longfloat& a); //переопределение ввода
friend ostream& operator<<(ostream& file, longfloat& a); //переопределение вывода
};
istream& operator >> (istream& file,longfloat& a)
{
//=============================================================================
// описание данных для ввода
//=============================================================================
char sim; //текущий символ
bool flag = true; //наличие знака
//=============================================================================
// инициализация массива
//=============================================================================
for(int i=0;i<count;i++)
a.chislo[i] = 0;
file>>sim;
//=============================================================================
// проверка знака
//=============================================================================
if(sim == '-') //если число отрицательное
a.znak = false;
else if(sim == '+') //если число положительное
a.znak = true;
else //если знак не указан считаем число положительным
{
a.znak = true;
flag = false; //знака нет снова читаем этот символ
}
if(flag)
file>>sim; //если знак был читаем следующий символ
else
flag = true;
//=============================================================================
// обработка и ввод числа
//=============================================================================
a.por=0;
a.len = 0;
while(!in.eof())
{
//=============================================================================
// целая часть (представлена в инвертированном ввиде)
//=============================================================================
int i = count-1;
while((sim != '.')&&(!in.eof()))
{
a.por++;
a.len++;
a.chislo[i] = sim-48;
i--;
file>>sim;
}
file>>sim;
//=============================================================================
// дробная часть (представлена в инвертированном ввиде)
//=============================================================================
while(!in.eof())
{
a.len++;
a.chislo[i] = sim-48;
i--;
file>>sim;
}
}
//=============================================================================
// проверка
//=============================================================================
for(int i=0;i<count;i++)
std::cout<<a.chislo[i];
//=============================================================================
// инвертирование обратно
//=============================================================================
int razn = count-a.len; //находим длину числа
int tmp; //вспомогательная переменнная для переворота
int i=razn; //левая граница
int j=count-1; //правая граница
for(i,j;i<j;i++,j--)
{
tmp = a.chislo[i];
a.chislo[i] = a.chislo[j];
a.chislo[j] = tmp;
}
//=============================================================================
// проверка
//=============================================================================
std::cout<<"\n";
for(int i=0;i<count;i++)
std::cout<<a.chislo[i];
return file;
}