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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2013, 21:09   #1
BooMKaa
 
Регистрация: 07.04.2013
Сообщений: 4
По умолчанию OpenDialog в C++

Добрый день. Возникла проблемка с сей операцией при открытия файла.
Вообщем такой код для кнопок открытия файла и сохранения в файл соответсвенно:
Код:
FILE *f;
.............
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(OpenDialog1->Execute()) {
	f=fopen(OpenDialog1->FileName.c_str(),"rt");
	n=0;
	while(!feof(f)) {
		fscanf(f,"%i %i %i\n",MyKon[n].R0,MyKon[n].h,MyKon[n].R1);
		n++;
}
	Edit1->Text=IntToStr(n);
	fclose(f);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
if(SaveDialog1->Execute()) {
	n=StrToInt(Edit1->Text);
	f=fopen(SaveDialog1->FileName.c_str(),"wt");
	for(int i=0; i<n; i++) {
		fprintf(f,"%i %i %i\n",MyKon[i].R0,MyKon[i].h,MyKon[i].R1);
	}
	fclose(f);
}
}
Сама проблема с открытием файла, в то время как сохранение работает нормально. При попытке открыть сохранённый файл появляется такая гадость:
При брейке указывает на scanf. Подскажите в чём проблема и как решить

Последний раз редактировалось BooMKaa; 07.04.2013 в 21:35.
BooMKaa вне форума Ответить с цитированием
Старый 07.04.2013, 22:00   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Полагаю, не выделена память под массив MyKon
eoln вне форума Ответить с цитированием
Старый 07.04.2013, 23:05   #3
BooMKaa
 
Регистрация: 07.04.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Полагаю, не выделена память под массив MyKon
так другие функции спокойно работают с этим массивом, и берут значения с него и записывают
он объявляется в начале кода
Код:
struct Sector {
  float R0,R1,h;};
  int n; int MaxN;
  float MaxV; Sector MyKon[10];
BooMKaa вне форума Ответить с цитированием
Старый 08.04.2013, 00:49   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Во-первых нужно писать fscanf(f,"%i %i %i\n",&MyKon[n].R0,&MyKon[n].h,&MyKon[n].R1);
Во-вторых - поля в структуре у тебя объявлены как float, а читаешь и пишешь ты их как %i. Определись )
Son Of Pain вне форума Ответить с цитированием
Старый 08.04.2013, 04:10   #5
BooMKaa
 
Регистрация: 07.04.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Во-первых нужно писать fscanf(f,"%i %i %i\n",&MyKon[n].R0,&MyKon[n].h,&MyKon[n].R1);
Во-вторых - поля в структуре у тебя объявлены как float, а читаешь и пишешь ты их как %i. Определись )
Я и забыл про ссылки, давно не пользовался, спасибо, заработало)
Да сути этот float не менял, ибо значения целочисленные на деле, просто по шаблону сделал. Ещё кой-какие трудности с выведением считанных данных в таблицу stringgrid, но это уже другая история)
BooMKaa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenDialog Ajempp Общие вопросы C/C++ 6 09.06.2011 14:05
OpenDialog NitroSki Компоненты Delphi 4 08.06.2011 08:52
OpenDialog Cabyrc БД в Delphi 4 05.04.2009 11:56
opendialog blackstersl Общие вопросы Delphi 4 18.09.2008 15:21
OpenDialog.Options:=OpenDialog.Options+[ofAllowMultiSelect]; necky Компоненты Delphi 2 11.08.2007 12:53