Форум программистов, компьютерный форум CyberForum.ru

Запись/чтение нуля из бинарника - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Целочисленная квадратичная матрица http://www.cyberforum.ru/cpp-beginners/thread66827.html
Дана целочисленная квадратичная матрица. Определить: 1) Количество положительных элементов 2) Найти максимальный из элементов, расположенных на главной диагонали Помогите!!!
C++ заполнить массив Привет. Помогите пожалуйста, нужно рандомно заполнить прямоугольный(!) массив. Буду очнь благодарна http://www.cyberforum.ru/cpp-beginners/thread66812.html
C++ Как измерить скорость работы кода
Хочу оптимизировать свой код и найти самые медленные места Можно как то измерить к примеру сколько времени занимает выполнение отдельного цикла или функции ?
Окружности и треугольник! C++
Даны вещественные числа x1,y1,x2,y2,x3,y3. Каждая пара чисел xi,yi, где i=1,2,3, определяет координаты одной из вершин плоского треугольника. Вычислить координаты центра и радиус окружности, описанной вокруг этого треугольника, и координаты центра и радиус окружности, вписанной в этот треугольник. Вычисление организовать при помощи подпрограмм. Вот код, где здесь ошибка? #include <stdio.h>...
C++ C++. Массив http://www.cyberforum.ru/cpp-beginners/thread66785.html
У прилавка выстроилась очередь из N покупателей. Время обслуживания продавцом каждого покупателя в минутах занесено в вещественный массив T. Получить массив С, содержащий время пребывания каждого покупателя в очереди. Указать номер покупателя, для обслуживания которого продавцу потребовалось самое малое время. Помогите пожалуйста решить задачу.
C++ Код не компилируется Объясните пож-та, почему код не компилируется: // File Output.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <fstream> #include <iostream> #include <string.h> подробнее

Показать сообщение отдельно
Guard
Сообщений: n/a

Запись/чтение нуля из бинарника - C++

24.11.2009, 11:35. Просмотров 515. Ответов 4
Метки (Все метки)

Здравствуйте!

Такая проблема обозначилась:
есть некоторая переменная типа unsigned int tt, которая на каждом шаге цикла должна записываться в файл, предваряя собой выборку данных. При этом, первое значение перменной равно 0 (ибо время), записываю его(ноль) в файл, в следующих 2 строках делаю проверку (возврат на 4 байта, чтение в другую переменную) и получаю значение этой другой переменной не 0, а 12097456980-образную ерунду. На последующих шагах цикла все выполняется правильно... Я в ступоре

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
FILE* fa32=NULL,*fcomdat=NULL;
 
    float fdat[32], Kadrf=0;
    short nzap=0;
    unsigned short nn_av=0;
    short dat[150],kk;
    unsigned int tt=0; // определение переменной
    char drive[MAXDRIVE], dir[MAXDIR], file[MAXFILE];
    char ext[MAXEXT], buffer[200];
    char ctemp[1000];
    AnsiString Ext,temp,buff;
    fnsplit(Fil2.c_str(),drive,dir,file,ext);
    Ext=(AnsiString)ext;
    Ext=Ext.LowerCase();
    fa32=fopen(Fil2.c_str(),"r+b");
    temp=Fil1;
    temp.Delete(temp.LastDelimiter("."),temp.Length());
    temp+=".dat";
    fcomdat=fopen(temp.c_str(),"rt");
 
    if (Ext==".edm")
    {
        fseek(fa32,64,0);
        fseek(fa32,sizeof(int),1);
        fseek(fa32,sizeof(short),1);
        fseek(fa32,sizeof(struct date),1);
        fseek(fa32,-(long)(sizeof(struct date)),SEEK_CUR);
        fseek(fa32,sizeof(TDateTime),1);
        fseek(fa32,sizeof(short),1);
// чтение из COMTRADE результатов и запись в *.edm
        for (short ii=0; ii<nn; ii++)
        {
            fgets(ctemp,1000,fcomdat);
            ctemp[32*6+10*2+32*1+1]='\0';
            temp=(AnsiString)ctemp;
            kk=npar-1;
            for (short i=0;i<npar;i++, kk--)
            {
                buff=ReadLast(temp);
                dat[kk]=buff.ToInt();
            }
            buff=ReadLast(temp);
            buff=ReadLast(temp);
            tt=(buff.ToInt())*1000/dfr[0].ss;
            fwrite(&tt,sizeof(unsigned int),1,fa32);
            fseek(fa32,-sizeof(tt),1);
            fread(&tt,sizeof(tt),1,fa32);
            fwrite(&dat,npar*sizeof(short),1,fa32);
        }
    }
    else if(Ext==".a32")
    {
        fread(&nn_av,sizeof(unsigned short),1,fa32);
        fseek(fa32,sizeof(short),1);
        fread(&nzap,sizeof(short),1,fa32);
        fseek(fa32,sizeof(short),1);
        fseek(fa32,sizeof(TDateTime),1);
        fread(&Kadrf,sizeof(float),1,fa32);
        nn=nn_av*nzap;
        step=0;
        for (short ii=0; ii<nn_av; ii++)
        {
            int dt=nzap*Kadrf;
            int tt_t=0;
            fwrite(&tt,sizeof(tt),1,fa32);
            step+=dt;
// проверка
            fseek(fa32,-sizeof(tt),1);
            fread(&tt_t,sizeof(tt),1,fa32);
            for (short cc=0; cc<nzap;cc++)
            {
                fgets(ctemp,1000,fcomdat);
                temp=(AnsiString)ctemp;
                kk=npar-1;
                for (short i=0;i<npar;i++, kk--)
                {
                    buff=ReadLast(temp);
                    dat[kk]=buff.ToInt();
                }
                fwrite(&dat,npar*sizeof(short),1,fa32);
            }
        }
    }
    fclose(fcomdat);
    fclose(fa32);
При этом, для файла с расширением *.edm все работает прекрасно и так, как нужно.
Буду очень признателен даже не за исправленный код, а за объяснение причины явления - исправлю сам, надеюсь

Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru