Armenian Knowledge Base

Armenian Knowledge Base (https://forum.armkb.com/)
-   Languages, Compilers, Interpreters (https://forum.armkb.com/languages-compilers-interpreters/)
-   -   help with fscanf, plz (https://forum.armkb.com/languages-compilers-interpreters/20144-help-fscanf-plz.html)

Азазелка 14.10.2005 14:14

help with fscanf, plz
 
У меня программа, которая работает с массивами и время от времени записывает их в файлы. Запись в файлы проделывается для того, чтоб в случае вылета программы (ну, бывает, свет там отключат или сисадмины буйствуют) данные не терялись. Но вот эта *********** функция fscanf после вылета все читает неправильно.
Вернее, вроде читает нормально данные, которые надо читать как integer, но вот с float-ами у нее проблемы.
Пытаюсь выводить то, что он прочел, но выводит какой-то мусор, который был в этом массиве и до прочтения.

Code:

FILE *temp_arr1 = fopen("temp_arr1.dat","r");
for (int i = 0; i < Sl_Ar; i++)
        fscanf(temp_arr1, "%f\n", &first[i]);
fclose(temp_arr1);


Hans Andersen 14.10.2005 14:41

some tips:
-stugi vor filen bazvel a
-amen fscanf-iz araj stugi vor eof chi der

noone 14.10.2005 14:57

без \n пробовала?...

Азазелка 14.10.2005 17:18

Quote:

Originally Posted by Hans Andersen
some tips:
-stugi vor filen bazvel a
-amen fscanf-iz araj stugi vor eof chi der

Вор ми хат ел асес вонц ет сах стугем (инеты чкркрем) гжот клини
noone, пока нет..

Hans Andersen 14.10.2005 17:38

smth:
fopen
if (temp_arr1)
{}

while (!feof(temp_arr1))
{
fscanf
i++;
if (i > max)
{lav chi lav chi, mez file a; break}
}
if (i < max)
{lav chi lav chi2, poqr file a}
fclose

AvDav 14.10.2005 20:47

kam el c++-ov pordzi:
Code:

ifstream is("a.dat");
vector<float> data;
copy(istream_iterator<float>(is), istream_iterator<float>(), back_inserter(data));


nm 14.10.2005 21:01

это как раз ;)
memset(first, 0, sizeof(first[0] * Sl_Ar));

ну и массив - у тебя floating ili double?

Азазелка 14.10.2005 21:59

Quote:

Originally Posted by nm
это как раз ;)
memset(first, 0, sizeof(first[0] * Sl_Ar));

ну и массив - у тебя floating ili double?

double
...
И разрази меня гром если я что-нибудь поняла :(

nm 15.10.2005 09:06

Quote:

Originally Posted by Азазелка
double
...
И разрази меня гром если я что-нибудь поняла :(

1. обнулять массив перед записью туда данных ;) просто хороший стиль ;)


man fscanf
Code:

    l (ell)  Indicates that the conversion will be one of dioux or n and the
              next pointer is a pointer to a long int (rather than int), that
              the conversion will be one of a, e, f, or g and the next pointer
              is a pointer to double (rather than float), or that the conver-
              sion will be one of c, s or [ and the next pointer is a pointer
              to an array of wchar_t (rather than char).


Agregat 15.10.2005 11:15

Quote:

Originally Posted by Азазелка
double
...
И разрази меня гром если я что-нибудь поняла :(

Ну так, милая моя, если double, тогда lf/g/e, если float, тогда f/g/e. Нельзя путать, божий дар (64/80 битов) с яичницей (32) :)

nm 15.10.2005 12:36

Quote:

Originally Posted by Agregat
Ну так, милая моя, если double, тогда lf/g/e, если float, тогда f/g/e. Нельзя путать, божий дар (64/80 битов) с яичницей (32) :)


так и запишем - согласно комитету IEEE божий дар имеет размер 64 или 80.

Азазелка 17.10.2005 15:18

Всем спасибо, ребята, кажись заработало :)

Agregat 17.10.2005 15:20

Quote:

Originally Posted by nm
так и запишем - согласно комитету IEEE божий дар имеет размер 64 или 80.

На самом деле может быть и 32 :) условие такое
sizeof(float) <= sizeof(double), а количество битов - это уже от лукавого

Hans Andersen 17.10.2005 15:20

nu i v chem imenno byla problema?

Азазелка 17.10.2005 15:23

Quote:

Originally Posted by Hans Andersen
nu i v chem imenno byla problema?

Фиг его :) собственно, я даже не уверена, что он все нормально читает. Но на результаты это уже сильно не влияет, так что пускай живет :) Кажется проблема была именно в том, о чем говорил Агрегат.


All times are GMT. The time now is 13:53.

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.