#include <fstream.h>
ofstream fout;
fout.open("tests.txt");
fout << "Вводимое значение от 0 до 65535:";
fout << numfactorial;
fout << "Значение факториала вычеслинное рекурсивным алгоритмом";
fout << Edit2->Text.c_str();
fout << "Вводимое значение от 0 до 65535:";
fout << numfactorial;
fout << "Значение факториала вычеслинное рекурсивным алгоритмом";
fout << Edit3->Text.c_str();
Ошибка при работе с файлами
Помогите пожалуйста поправить.
Ошибка такая
Выскакивает окно Debugger Exception Notification в этом окне написано
Project factorial.exe raised exception EAccessViolation with message 'Access violation at address 00490109. Read of address 00000000'. Process stopped. Use step or Run continue.
Вот без этих строк всё нормально работает
Код:
Сам код
Код:
//------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "factorial.h"
#include <fstream.h>
//------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
unsigned short numfactorial;
Factorial Factorial1;
ofstream fout;
//------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
fout.open("tests.txt");
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
numfactorial = StrToInt(Edit1->Text);
fout << "Вводимое значение от 0 до 65535:";
fout << numfactorial;
if (Factorial1.recfactorial(numfactorial) != 0)
{
Edit2->Text = IntToStr(Factorial1.recfactorial(numfactorial));
fout << "Значение факториала вычеслинное рекурсивным алгоритмом";
fout << Edit2->Text.c_str();
}
else
MessageBox(0, "Факториал с помощью рекурсивного алгоритма не может быть вычеслен!","Сообщение", MB_OK);
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
numfactorial = StrToInt(Edit1->Text);
fout << "Вводимое значение от 0 до 65535:";
fout << numfactorial;
if (Factorial1.factorial(numfactorial) != 0)
{
Edit3->Text = IntToStr(Factorial1.factorial(numfactorial));
fout << "Значение факториала вычеслинное рекурсивным алгоритмом";
fout << Edit3->Text.c_str();
}
else
MessageBox(0, "Факториал с помощью не рекурсивного алгоритма не может быть вычеслен!","Сообщение", MB_OK);
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (!Edit1->Text.IsEmpty())
Edit1->Clear();
if (!Edit2->Text.IsEmpty())
Edit2->Clear();
if (!Edit3->Text.IsEmpty())
Edit3->Clear();
Edit1->ReadOnly = false;
fout.close();
}
//------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if (Edit1->Text.IsEmpty())
return;
int i;
if (TryStrToInt(Edit1->Text, i))
{
if (i > -1)
{
if (i > 65535)
{
MessageBox(0, "Вы ввели значение больше чем 65535!","Сообщение", MB_OK);
Edit1->Clear();
}
AnsiString mynull = Edit1->Text;
if (mynull[1] == '0')
Edit1->ReadOnly = true;
}
else
{
MessageBox(0, "Вы ввели отрицательное число!","Сообщение", MB_OK);
Edit1->Clear();
}
}
else
{
MessageBox(0, "Введенный текст не является числом!","Сообщение", MB_OK);
Edit1->Clear();
}
}
//------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "factorial.h"
#include <fstream.h>
//------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
unsigned short numfactorial;
Factorial Factorial1;
ofstream fout;
//------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
fout.open("tests.txt");
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
numfactorial = StrToInt(Edit1->Text);
fout << "Вводимое значение от 0 до 65535:";
fout << numfactorial;
if (Factorial1.recfactorial(numfactorial) != 0)
{
Edit2->Text = IntToStr(Factorial1.recfactorial(numfactorial));
fout << "Значение факториала вычеслинное рекурсивным алгоритмом";
fout << Edit2->Text.c_str();
}
else
MessageBox(0, "Факториал с помощью рекурсивного алгоритма не может быть вычеслен!","Сообщение", MB_OK);
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
numfactorial = StrToInt(Edit1->Text);
fout << "Вводимое значение от 0 до 65535:";
fout << numfactorial;
if (Factorial1.factorial(numfactorial) != 0)
{
Edit3->Text = IntToStr(Factorial1.factorial(numfactorial));
fout << "Значение факториала вычеслинное рекурсивным алгоритмом";
fout << Edit3->Text.c_str();
}
else
MessageBox(0, "Факториал с помощью не рекурсивного алгоритма не может быть вычеслен!","Сообщение", MB_OK);
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (!Edit1->Text.IsEmpty())
Edit1->Clear();
if (!Edit2->Text.IsEmpty())
Edit2->Clear();
if (!Edit3->Text.IsEmpty())
Edit3->Clear();
Edit1->ReadOnly = false;
fout.close();
}
//------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if (Edit1->Text.IsEmpty())
return;
int i;
if (TryStrToInt(Edit1->Text, i))
{
if (i > -1)
{
if (i > 65535)
{
MessageBox(0, "Вы ввели значение больше чем 65535!","Сообщение", MB_OK);
Edit1->Clear();
}
AnsiString mynull = Edit1->Text;
if (mynull[1] == '0')
Edit1->ReadOnly = true;
}
else
{
MessageBox(0, "Вы ввели отрицательное число!","Сообщение", MB_OK);
Edit1->Clear();
}
}
else
{
MessageBox(0, "Введенный текст не является числом!","Сообщение", MB_OK);
Edit1->Clear();
}
}
//------------------------------------------------------------------------
Код:
ofstream stm;
stm.open("123",0x04);
stm<<"svsdvdfvdfv";
stm.close();
stm.open("123",0x04);
stm<<"svsdvdfvdfv";
stm.close();
вот так работает
Сам файл в наличии не имеется.