Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чтение из txt в массив float

88K
04 апреля 2013 года
Дмитрий Галактионов
2 / / 04.04.2013
в общем есть прога
FILE * pFile;
char mystring [100];

pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) perror ("Error opening file");
while( fgets (mystring , 100 , pFile) != NULL )
{
for(int i=0;i<strlen(mystring);i++)
if(mystring=='\n') mystring='\0';

Memo1->Lines->Add(FloatToStr(StrToFloat(mystring) * 200));

}

fclose (pFile);

она должна считывать значения с текстового файла, и просто выводить их в мэмо, на BCB ранней версии сделано, всё работает - повторяю на своём компе - access violatiоn -типа ошибки
Это как-то связано с тем, что BCB другой версии (2010) Embarcadero® C++Builder® XE
Не могу сказать что я программист со стажем, иначе бы не обратился сюда, помогите)

В файле значения выглядят так:
1.1
2.3
3.3
1
04 апреля 2013 года
kot_
7.3K / / 20.01.2000
вероятно проблема в этой строке:
 
Код:
Memo1->Lines->Add(FloatToStr(StrToFloat(mystring) * 200));
вероятно связано это с ошибкой здесь:

 
Код:
if(mystring=='\n') mystring='\0';
должно быть:

 
Код:
if(mystring[i]=='\n') mystring[i]='\0';
или так

 
Код:
//это пример как можно работать с символами С-строк
while(ch = *mystring++)
{
  if(ch == '\n')ch = '\0'
//что то делаем потом с ch - например формируем новую строку
//в принципе для строк полученных из файла так и необходимо делать
}

это так на вскидку. может еще какие бока. может и билдер свою роль играет.
Кстати. Используйте пожалуйста форматирование кода.
1
04 апреля 2013 года
kot_
7.3K / / 20.01.2000
Цитата: kot_

 
Код:
Memo1->Lines->Add(FloatToStr(StrToFloat(mystring) * 200));


и так делать не стоит. Лучше так:

 
Код:
float sch = 0.0;
try{
    sch = StrToFloat(mystring);
}
catch(...){
 //обрабатываем если не флоат
 continue;
}
sch *= 200;
Memo1->Lines->Add(FloatToStr(sch));
кода конечно больше - но он безопасней
88K
05 апреля 2013 года
Дмитрий Галактионов
2 / / 04.04.2013
Уважаемый, проблема не решилась, может есть ещё что-то? Или другой способ? Кто-то пользует такую же прогу?
20K
05 апреля 2013 года
ellor!
198 / / 24.05.2012
В отладчике надо смотреть, на какой строке вылетает.
446
05 апреля 2013 года
Meander
487 / / 04.09.2011
Все работает. Может среда барахлит?
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE * pFile;
char mystring [100];

pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) perror ("Error opening file");
while( fgets (mystring , 100 , pFile) != NULL )
{
for(int i=0;i<strlen(mystring);i++)
if(mystring[i] == '\n') mystring[i] = '\0';

Memo1->Lines->Add(FloatToStr(StrToFloat(mystring) * 200));

}

fclose (pFile);
}
Вообще надо пользоваться той средой, которая работает без багов и не требует тонкой настройки на каждом шагу.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог